Date.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace IXR;
  3. /**
  4. * IXR日期
  5. *
  6. * @package IXR
  7. */
  8. class Date
  9. {
  10. private $year;
  11. private $month;
  12. private $day;
  13. private $hour;
  14. private $minute;
  15. private $second;
  16. /**
  17. * @param int|string $time
  18. */
  19. public function __construct($time)
  20. {
  21. // $time can be a PHP timestamp or an ISO one
  22. if (is_numeric($time)) {
  23. $this->parseTimestamp(intval($time));
  24. } else {
  25. $this->parseIso($time);
  26. }
  27. }
  28. /**
  29. * @param int $timestamp
  30. */
  31. private function parseTimestamp(int $timestamp)
  32. {
  33. $this->year = date('Y', $timestamp);
  34. $this->month = date('m', $timestamp);
  35. $this->day = date('d', $timestamp);
  36. $this->hour = date('H', $timestamp);
  37. $this->minute = date('i', $timestamp);
  38. $this->second = date('s', $timestamp);
  39. }
  40. /**
  41. * @param string $iso
  42. */
  43. private function parseIso(string $iso)
  44. {
  45. $this->year = substr($iso, 0, 4);
  46. $this->month = substr($iso, 4, 2);
  47. $this->day = substr($iso, 6, 2);
  48. $this->hour = substr($iso, 9, 2);
  49. $this->minute = substr($iso, 12, 2);
  50. $this->second = substr($iso, 15, 2);
  51. }
  52. /**
  53. * @return string
  54. */
  55. public function getIso(): string
  56. {
  57. return $this->year . $this->month . $this->day . 'T' . $this->hour . ':' . $this->minute . ':' . $this->second;
  58. }
  59. /**
  60. * @return string
  61. */
  62. public function getXml(): string
  63. {
  64. return '<dateTime.iso8601>' . $this->getIso() . '</dateTime.iso8601>';
  65. }
  66. /**
  67. * @return false|int
  68. */
  69. public function getTimestamp()
  70. {
  71. return mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year);
  72. }
  73. }