TimeZoneTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Shared;
  3. use DateTime;
  4. use DateTimeZone;
  5. use PhpOffice\PhpSpreadsheet\Shared\Date;
  6. use PhpOffice\PhpSpreadsheet\Shared\TimeZone;
  7. use PHPUnit\Framework\TestCase;
  8. class TimeZoneTest extends TestCase
  9. {
  10. /**
  11. * @var string
  12. */
  13. private $tztimezone;
  14. /**
  15. * @var null|DateTimeZone
  16. */
  17. private $dttimezone;
  18. protected function setUp(): void
  19. {
  20. $this->tztimezone = TimeZone::getTimeZone();
  21. $this->dttimezone = Date::getDefaultTimeZoneOrNull();
  22. }
  23. protected function tearDown(): void
  24. {
  25. TimeZone::setTimeZone($this->tztimezone);
  26. Date::setDefaultTimeZone($this->dttimezone);
  27. }
  28. public function testSetTimezone(): void
  29. {
  30. $timezoneValues = [
  31. 'Europe/Prague',
  32. 'Asia/Tokyo',
  33. 'America/Indiana/Indianapolis',
  34. 'Pacific/Honolulu',
  35. 'Atlantic/St_Helena',
  36. ];
  37. foreach ($timezoneValues as $timezoneValue) {
  38. $result = TimeZone::setTimezone($timezoneValue);
  39. self::assertTrue($result);
  40. $result = Date::setDefaultTimezone($timezoneValue);
  41. self::assertTrue($result);
  42. }
  43. }
  44. public function testSetTimezoneBackwardCompatible(): void
  45. {
  46. $bcTimezone = 'Etc/GMT+10';
  47. $result = TimeZone::setTimezone($bcTimezone);
  48. self::assertTrue($result);
  49. $result = Date::setDefaultTimezone($bcTimezone);
  50. self::assertTrue($result);
  51. }
  52. public function testSetTimezoneWithInvalidValue(): void
  53. {
  54. $unsupportedTimezone = 'XEtc/GMT+10';
  55. $result = TimeZone::setTimezone($unsupportedTimezone);
  56. self::assertFalse($result);
  57. $result = Date::setDefaultTimezone($unsupportedTimezone);
  58. self::assertFalse($result);
  59. }
  60. public function testTimeZoneAdjustmentsInvalidTz(): void
  61. {
  62. $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class);
  63. $dtobj = DateTime::createFromFormat('Y-m-d H:i:s', '2008-09-22 00:00:00');
  64. if ($dtobj === false) {
  65. self::fail('DateTime createFromFormat failed');
  66. } else {
  67. $tstmp = $dtobj->getTimestamp();
  68. $unsupportedTimeZone = 'XEtc/GMT+10';
  69. TimeZone::getTimeZoneAdjustment($unsupportedTimeZone, $tstmp);
  70. }
  71. }
  72. public function testTimeZoneAdjustments(): void
  73. {
  74. $dtobj = DateTime::createFromFormat('Y-m-d H:i:s', '2008-01-01 00:00:00');
  75. if ($dtobj === false) {
  76. self::fail('DateTime createFromFormat failed');
  77. } else {
  78. $tstmp = $dtobj->getTimestamp();
  79. $supportedTimeZone = 'UTC';
  80. $adj = TimeZone::getTimeZoneAdjustment($supportedTimeZone, $tstmp);
  81. self::assertEquals(0, $adj);
  82. $supportedTimeZone = 'America/Toronto';
  83. $adj = TimeZone::getTimeZoneAdjustment($supportedTimeZone, $tstmp);
  84. self::assertEquals(-18000, $adj);
  85. $supportedTimeZone = 'America/Chicago';
  86. TimeZone::setTimeZone($supportedTimeZone);
  87. $adj = TimeZone::getTimeZoneAdjustment(null, $tstmp);
  88. self::assertEquals(-21600, $adj);
  89. }
  90. }
  91. }