bug68549-dst-transition-DateTime-setTimestamp.phpt 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. --TEST--
  2. Bug #68549 (setting timestamp around a DST transition)
  3. --CREDITS--
  4. Roel Harbers <roel.harbers@on2it.net>
  5. --FILE--
  6. <?php
  7. $timezonesWithTimestamps = [
  8. 'America/Los_Angeles' => [
  9. // LANG=en_US TZ="America/Los_Angeles" date --date=@<...>
  10. // forward:
  11. 1615687199, // Sat Mar 13 17:59:59 PST 2021 (Sun Mar 14 01:59:59 UTC 2021)
  12. 1615687200, // Sat Mar 13 18:00:00 PST 2021 (Sun Mar 14 02:00:00 UTC 2021)
  13. 1615687201, // Sat Mar 13 18:00:01 PST 2021 (Sun Mar 14 02:00:01 UTC 2021)
  14. 1615690799, // Sat Mar 13 18:59:59 PST 2021 (Sun Mar 14 02:59:59 UTC 2021)
  15. 1615690800, // Sat Mar 13 19:00:00 PST 2021 (Sun Mar 14 03:00:00 UTC 2021)
  16. 1615690801, // Sat Mar 13 19:00:01 PST 2021 (Sun Mar 14 03:00:01 UTC 2021)
  17. 1615708799, // Sun Mar 13 23:59:59 PST 2021
  18. 1615708800, // Sun Mar 14 00:00:00 PST 2021
  19. 1615708801, // Sun Mar 14 00:00:01 PST 2021
  20. 1615712399, // Sun Mar 14 00:59:59 PST 2021
  21. 1615712400, // Sun Mar 14 01:00:00 PST 2021
  22. 1615712401, // Sun Mar 14 01:00:01 PST 2021
  23. 1615715999, // Sun Mar 14 01:59:59 PST 2021
  24. 1615716000, // Sun Mar 14 03:00:00 PDT 2021
  25. 1615716001, // Sun Mar 14 03:00:01 PDT 2021
  26. 1615719599, // Sun Mar 14 03:59:59 PDT 2021
  27. 1615719600, // Sun Mar 14 04:00:00 PDT 2021
  28. 1615719601, // Sun Mar 14 04:00:01 PDT 2021
  29. // backward:
  30. 1636246799, // Sat Nov 6 17:59:59 PDT 2021 (Sun Nov 7 00:59:59 UTC 2021)
  31. 1636246800, // Sat Nov 6 18:00:00 PDT 2021 (Sun Nov 7 01:00:00 UTC 2021)
  32. 1636246801, // Sat Nov 6 18:00:01 PDT 2021 (Sun Nov 7 01:00:01 UTC 2021)
  33. 1636250399, // Sat Nov 6 18:59:59 PDT 2021 (Sun Nov 7 01:59:59 UTC 2021)
  34. 1636250400, // Sat Nov 6 19:00:00 PDT 2021 (Sun Nov 7 02:00:00 UTC 2021)
  35. 1636250401, // Sat Nov 6 19:00:01 PDT 2021 (Sun Nov 7 02:00:01 UTC 2021)
  36. 1636268399, // Sat Nov 6 23:59:59 PDT 2021
  37. 1636268400, // Sun Nov 7 00:00:00 PDT 2021
  38. 1636268401, // Sun Nov 7 00:00:01 PDT 2021
  39. 1636271999, // Sun Nov 7 00:59:59 PDT 2021
  40. 1636272000, // Sun Nov 7 01:00:00 PDT 2021
  41. 1636272001, // Sun Nov 7 01:00:01 PDT 2021
  42. 1636275599, // Sun Nov 7 01:59:59 PDT 2021
  43. 1636275600, // Sun Nov 7 01:00:00 PST 2021
  44. 1636275601, // Sun Nov 7 01:00:01 PST 2021
  45. 1636279199, // Sun Nov 7 01:59:59 PST 2021
  46. 1636279200, // Sun Nov 7 02:00:00 PST 2021
  47. 1636279201, // Sun Nov 7 02:00:01 PST 2021
  48. ],
  49. 'Atlantic/Azores' => [
  50. // LANG=en_US TZ="Atlantic/Azores" date --date=@<...>
  51. // forward:
  52. 1616889599, // Sat Mar 27 22:59:59 AZOT 2021 (Sat Mar 27 23:59:59 UTC 2021)
  53. 1616889600, // Sat Mar 27 23:00:00 AZOT 2021 (Sun Mar 28 00:00:00 UTC 2021)
  54. 1616889601, // Sat Mar 27 23:00:01 AZOT 2021 (Sun Mar 28 00:00:01 UTC 2021)
  55. 1616893199, // Sat Mar 27 23:59:59 AZOT 2021 (Sun Mar 28 00:59:59 UTC 2021)
  56. 1616893200, // Sun Mar 28 01:00:00 AZOST 2021 (Sun Mar 28 01:00:00 UTC 2021)
  57. 1616893201, // Sun Mar 28 01:00:01 AZOST 2021 (Sun Mar 28 01:00:01 UTC 2021)
  58. 1616896799, // Sun Mar 28 01:59:59 AZOST 2021
  59. 1616896800, // Sun Mar 28 02:00:00 AZOST 2021
  60. 1616896801, // Sun Mar 28 02:00:01 AZOST 2021
  61. // backward:
  62. 1635638399, // Sat Oct 30 23:59:59 AZOST 2021 (Sat Oct 30 23:59:59 UTC 2021)
  63. 1635638400, // Sun Oct 31 00:00:00 AZOST 2021 (Sun Oct 31 00:00:00 UTC 2021)
  64. 1635638401, // Sun Oct 31 00:00:01 AZOST 2021 (Sun Oct 31 00:00:01 UTC 2021)
  65. 1635641999, // Sun Oct 31 00:59:59 AZOST 2021 (Sun Oct 31 00:59:59 UTC 2021)
  66. 1635642000, // Sun Oct 31 00:00:00 AZOT 2021 (Sun Oct 31 01:00:00 UTC 2021)
  67. 1635642001, // Sun Oct 31 00:00:01 AZOT 2021 (Sun Oct 31 01:00:01 UTC 2021)
  68. 1635645599, // Sun Oct 31 00:59:59 AZOT 2021
  69. 1635645600, // Sun Oct 31 01:00:00 AZOT 2021
  70. 1635645601, // Sun Oct 31 01:00:01 AZOT 2021
  71. ],
  72. 'Europe/London' => [
  73. // LANG=en_US TZ="Europe/London" date --date=@<...>
  74. // forward:
  75. 1616889599, // Sat Mar 27 23:59:59 GMT 2021
  76. 1616889600, // Sun Mar 28 00:00:00 GMT 2021
  77. 1616889601, // Sun Mar 28 00:00:01 GMT 2021
  78. 1616893199, // Sun Mar 28 00:59:59 GMT 2021 (Sun Mar 28 00:59:59 UTC 2021)
  79. 1616893200, // Sun Mar 28 02:00:00 BST 2021 (Sun Mar 28 01:00:00 UTC 2021)
  80. 1616893201, // Sun Mar 28 02:00:01 BST 2021 (Sun Mar 28 01:00:01 UTC 2021)
  81. 1616896799, // Sun Mar 28 02:59:59 BST 2021 (Sun Mar 28 01:59:59 UTC 2021)
  82. 1616896800, // Sun Mar 28 03:00:00 BST 2021 (Sun Mar 28 02:00:00 UTC 2021)
  83. 1616896801, // Sun Mar 28 03:00:01 BST 2021 (Sun Mar 28 02:00:01 UTC 2021)
  84. // backward:
  85. 1635638399, // Sun Oct 31 00:59:59 BST 2021
  86. 1635638400, // Sun Oct 31 01:00:00 BST 2021
  87. 1635638401, // Sun Oct 31 01:00:01 BST 2021
  88. 1635641999, // Sun Oct 31 01:59:59 BST 2021 (Sun Oct 31 00:59:59 UTC 2021)
  89. 1635642000, // Sun Oct 31 01:00:00 GMT 2021 (Sun Oct 31 01:00:00 UTC 2021)
  90. 1635642001, // Sun Oct 31 01:00:01 GMT 2021 (Sun Oct 31 01:00:01 UTC 2021)
  91. 1635645599, // Sun Oct 31 01:59:59 GMT 2021 (Sun Oct 31 01:59:59 UTC 2021)
  92. 1635645600, // Sun Oct 31 02:00:00 GMT 2021 (Sun Oct 31 02:00:00 UTC 2021)
  93. 1635645601, // Sun Oct 31 02:00:01 GMT 2021 (Sun Oct 31 02:00:01 UTC 2021)
  94. ],
  95. 'Europe/Amsterdam' => [
  96. // LANG=en_US TZ="Europe/Amsterdam" date --date=@<...>
  97. // forward:
  98. 1616885999, // Sat Mar 27 23:59:59 CET 2021
  99. 1616886000, // Sun Mar 28 00:00:00 CET 2021
  100. 1616886001, // Sun Mar 28 00:00:01 CET 2021
  101. 1616889599, // Sun Mar 28 00:59:59 CET 2021
  102. 1616889600, // Sun Mar 28 01:00:00 CET 2021
  103. 1616889601, // Sun Mar 28 01:00:01 CET 2021
  104. 1616893199, // Sun Mar 28 01:59:59 CET 2021
  105. 1616893200, // Sun Mar 28 03:00:00 CEST 2021
  106. 1616893201, // Sun Mar 28 03:00:01 CEST 2021
  107. 1616896799, // Sun Mar 28 03:59:59 CEST 2021 (Sun Mar 28 01:59:59 UTC 2021)
  108. 1616896800, // Sun Mar 28 04:00:00 CEST 2021 (Sun Mar 28 02:00:00 UTC 2021)
  109. 1616896801, // Sun Mar 28 04:00:01 CEST 2021 (Sun Mar 28 02:00:01 UTC 2021)
  110. 1616900399, // Sun Mar 28 04:59:59 CEST 2021 (Sun Mar 28 02:59:59 UTC 2021)
  111. 1616900400, // Sun Mar 28 05:00:00 CEST 2021 (Sun Mar 28 03:00:00 UTC 2021)
  112. 1616900401, // Sun Mar 28 05:00:01 CEST 2021 (Sun Mar 28 03:00:01 UTC 2021)
  113. // backward:
  114. 1635631199, // Sat Oct 30 23:59:59 CEST 2021
  115. 1635631200, // Sun Oct 31 00:00:00 CEST 2021
  116. 1635631201, // Sun Oct 31 00:00:01 CEST 2021
  117. 1635638399, // Sun Oct 31 01:59:59 CEST 2021
  118. 1635638400, // Sun Oct 31 02:00:00 CEST 2021
  119. 1635638401, // Sun Oct 31 02:00:01 CEST 2021
  120. 1635641999, // Sun Oct 31 02:59:59 CEST 2021
  121. 1635642000, // Sun Oct 31 02:00:00 CET 2021
  122. 1635642001, // Sun Oct 31 02:00:01 CET 2021
  123. 1635645599, // Sun Oct 31 02:59:59 CET 2021 (Sun Oct 31 01:59:59 UTC 2021)
  124. 1635645600, // Sun Oct 31 03:00:00 CET 2021 (Sun Oct 31 02:00:00 UTC 2021)
  125. 1635645601, // Sun Oct 31 03:00:01 CET 2021 (Sun Oct 31 02:00:01 UTC 2021)
  126. 1635649199, // Sun Oct 31 03:59:59 CET 2021 (Sun Oct 31 02:59:59 UTC 2021)
  127. 1635649200, // Sun Oct 31 04:00:00 CET 2021 (Sun Oct 31 03:00:00 UTC 2021)
  128. 1635649201, // Sun Oct 31 04:00:01 CET 2021 (Sun Oct 31 03:00:01 UTC 2021)
  129. ],
  130. ];
  131. foreach ($timezonesWithTimestamps as $timezone => $timestamps) {
  132. foreach ($timestamps as $timestamp) {
  133. $tz = new DateTimeZone($timezone);
  134. $dt = new DateTime('now', $tz);
  135. $dt->setTimestamp($timestamp);
  136. printf("%s %d -> %d %s\n", $timezone, $timestamp, $dt->getTimestamp(), $dt->format(DateTimeInterface::ISO8601));
  137. }
  138. }
  139. ?>
  140. --EXPECT--
  141. America/Los_Angeles 1615687199 -> 1615687199 2021-03-13T17:59:59-0800
  142. America/Los_Angeles 1615687200 -> 1615687200 2021-03-13T18:00:00-0800
  143. America/Los_Angeles 1615687201 -> 1615687201 2021-03-13T18:00:01-0800
  144. America/Los_Angeles 1615690799 -> 1615690799 2021-03-13T18:59:59-0800
  145. America/Los_Angeles 1615690800 -> 1615690800 2021-03-13T19:00:00-0800
  146. America/Los_Angeles 1615690801 -> 1615690801 2021-03-13T19:00:01-0800
  147. America/Los_Angeles 1615708799 -> 1615708799 2021-03-13T23:59:59-0800
  148. America/Los_Angeles 1615708800 -> 1615708800 2021-03-14T00:00:00-0800
  149. America/Los_Angeles 1615708801 -> 1615708801 2021-03-14T00:00:01-0800
  150. America/Los_Angeles 1615712399 -> 1615712399 2021-03-14T00:59:59-0800
  151. America/Los_Angeles 1615712400 -> 1615712400 2021-03-14T01:00:00-0800
  152. America/Los_Angeles 1615712401 -> 1615712401 2021-03-14T01:00:01-0800
  153. America/Los_Angeles 1615715999 -> 1615715999 2021-03-14T01:59:59-0800
  154. America/Los_Angeles 1615716000 -> 1615716000 2021-03-14T03:00:00-0700
  155. America/Los_Angeles 1615716001 -> 1615716001 2021-03-14T03:00:01-0700
  156. America/Los_Angeles 1615719599 -> 1615719599 2021-03-14T03:59:59-0700
  157. America/Los_Angeles 1615719600 -> 1615719600 2021-03-14T04:00:00-0700
  158. America/Los_Angeles 1615719601 -> 1615719601 2021-03-14T04:00:01-0700
  159. America/Los_Angeles 1636246799 -> 1636246799 2021-11-06T17:59:59-0700
  160. America/Los_Angeles 1636246800 -> 1636246800 2021-11-06T18:00:00-0700
  161. America/Los_Angeles 1636246801 -> 1636246801 2021-11-06T18:00:01-0700
  162. America/Los_Angeles 1636250399 -> 1636250399 2021-11-06T18:59:59-0700
  163. America/Los_Angeles 1636250400 -> 1636250400 2021-11-06T19:00:00-0700
  164. America/Los_Angeles 1636250401 -> 1636250401 2021-11-06T19:00:01-0700
  165. America/Los_Angeles 1636268399 -> 1636268399 2021-11-06T23:59:59-0700
  166. America/Los_Angeles 1636268400 -> 1636268400 2021-11-07T00:00:00-0700
  167. America/Los_Angeles 1636268401 -> 1636268401 2021-11-07T00:00:01-0700
  168. America/Los_Angeles 1636271999 -> 1636271999 2021-11-07T00:59:59-0700
  169. America/Los_Angeles 1636272000 -> 1636272000 2021-11-07T01:00:00-0700
  170. America/Los_Angeles 1636272001 -> 1636272001 2021-11-07T01:00:01-0700
  171. America/Los_Angeles 1636275599 -> 1636275599 2021-11-07T01:59:59-0700
  172. America/Los_Angeles 1636275600 -> 1636275600 2021-11-07T01:00:00-0800
  173. America/Los_Angeles 1636275601 -> 1636275601 2021-11-07T01:00:01-0800
  174. America/Los_Angeles 1636279199 -> 1636279199 2021-11-07T01:59:59-0800
  175. America/Los_Angeles 1636279200 -> 1636279200 2021-11-07T02:00:00-0800
  176. America/Los_Angeles 1636279201 -> 1636279201 2021-11-07T02:00:01-0800
  177. Atlantic/Azores 1616889599 -> 1616889599 2021-03-27T22:59:59-0100
  178. Atlantic/Azores 1616889600 -> 1616889600 2021-03-27T23:00:00-0100
  179. Atlantic/Azores 1616889601 -> 1616889601 2021-03-27T23:00:01-0100
  180. Atlantic/Azores 1616893199 -> 1616893199 2021-03-27T23:59:59-0100
  181. Atlantic/Azores 1616893200 -> 1616893200 2021-03-28T01:00:00+0000
  182. Atlantic/Azores 1616893201 -> 1616893201 2021-03-28T01:00:01+0000
  183. Atlantic/Azores 1616896799 -> 1616896799 2021-03-28T01:59:59+0000
  184. Atlantic/Azores 1616896800 -> 1616896800 2021-03-28T02:00:00+0000
  185. Atlantic/Azores 1616896801 -> 1616896801 2021-03-28T02:00:01+0000
  186. Atlantic/Azores 1635638399 -> 1635638399 2021-10-30T23:59:59+0000
  187. Atlantic/Azores 1635638400 -> 1635638400 2021-10-31T00:00:00+0000
  188. Atlantic/Azores 1635638401 -> 1635638401 2021-10-31T00:00:01+0000
  189. Atlantic/Azores 1635641999 -> 1635641999 2021-10-31T00:59:59+0000
  190. Atlantic/Azores 1635642000 -> 1635642000 2021-10-31T00:00:00-0100
  191. Atlantic/Azores 1635642001 -> 1635642001 2021-10-31T00:00:01-0100
  192. Atlantic/Azores 1635645599 -> 1635645599 2021-10-31T00:59:59-0100
  193. Atlantic/Azores 1635645600 -> 1635645600 2021-10-31T01:00:00-0100
  194. Atlantic/Azores 1635645601 -> 1635645601 2021-10-31T01:00:01-0100
  195. Europe/London 1616889599 -> 1616889599 2021-03-27T23:59:59+0000
  196. Europe/London 1616889600 -> 1616889600 2021-03-28T00:00:00+0000
  197. Europe/London 1616889601 -> 1616889601 2021-03-28T00:00:01+0000
  198. Europe/London 1616893199 -> 1616893199 2021-03-28T00:59:59+0000
  199. Europe/London 1616893200 -> 1616893200 2021-03-28T02:00:00+0100
  200. Europe/London 1616893201 -> 1616893201 2021-03-28T02:00:01+0100
  201. Europe/London 1616896799 -> 1616896799 2021-03-28T02:59:59+0100
  202. Europe/London 1616896800 -> 1616896800 2021-03-28T03:00:00+0100
  203. Europe/London 1616896801 -> 1616896801 2021-03-28T03:00:01+0100
  204. Europe/London 1635638399 -> 1635638399 2021-10-31T00:59:59+0100
  205. Europe/London 1635638400 -> 1635638400 2021-10-31T01:00:00+0100
  206. Europe/London 1635638401 -> 1635638401 2021-10-31T01:00:01+0100
  207. Europe/London 1635641999 -> 1635641999 2021-10-31T01:59:59+0100
  208. Europe/London 1635642000 -> 1635642000 2021-10-31T01:00:00+0000
  209. Europe/London 1635642001 -> 1635642001 2021-10-31T01:00:01+0000
  210. Europe/London 1635645599 -> 1635645599 2021-10-31T01:59:59+0000
  211. Europe/London 1635645600 -> 1635645600 2021-10-31T02:00:00+0000
  212. Europe/London 1635645601 -> 1635645601 2021-10-31T02:00:01+0000
  213. Europe/Amsterdam 1616885999 -> 1616885999 2021-03-27T23:59:59+0100
  214. Europe/Amsterdam 1616886000 -> 1616886000 2021-03-28T00:00:00+0100
  215. Europe/Amsterdam 1616886001 -> 1616886001 2021-03-28T00:00:01+0100
  216. Europe/Amsterdam 1616889599 -> 1616889599 2021-03-28T00:59:59+0100
  217. Europe/Amsterdam 1616889600 -> 1616889600 2021-03-28T01:00:00+0100
  218. Europe/Amsterdam 1616889601 -> 1616889601 2021-03-28T01:00:01+0100
  219. Europe/Amsterdam 1616893199 -> 1616893199 2021-03-28T01:59:59+0100
  220. Europe/Amsterdam 1616893200 -> 1616893200 2021-03-28T03:00:00+0200
  221. Europe/Amsterdam 1616893201 -> 1616893201 2021-03-28T03:00:01+0200
  222. Europe/Amsterdam 1616896799 -> 1616896799 2021-03-28T03:59:59+0200
  223. Europe/Amsterdam 1616896800 -> 1616896800 2021-03-28T04:00:00+0200
  224. Europe/Amsterdam 1616896801 -> 1616896801 2021-03-28T04:00:01+0200
  225. Europe/Amsterdam 1616900399 -> 1616900399 2021-03-28T04:59:59+0200
  226. Europe/Amsterdam 1616900400 -> 1616900400 2021-03-28T05:00:00+0200
  227. Europe/Amsterdam 1616900401 -> 1616900401 2021-03-28T05:00:01+0200
  228. Europe/Amsterdam 1635631199 -> 1635631199 2021-10-30T23:59:59+0200
  229. Europe/Amsterdam 1635631200 -> 1635631200 2021-10-31T00:00:00+0200
  230. Europe/Amsterdam 1635631201 -> 1635631201 2021-10-31T00:00:01+0200
  231. Europe/Amsterdam 1635638399 -> 1635638399 2021-10-31T01:59:59+0200
  232. Europe/Amsterdam 1635638400 -> 1635638400 2021-10-31T02:00:00+0200
  233. Europe/Amsterdam 1635638401 -> 1635638401 2021-10-31T02:00:01+0200
  234. Europe/Amsterdam 1635641999 -> 1635641999 2021-10-31T02:59:59+0200
  235. Europe/Amsterdam 1635642000 -> 1635642000 2021-10-31T02:00:00+0100
  236. Europe/Amsterdam 1635642001 -> 1635642001 2021-10-31T02:00:01+0100
  237. Europe/Amsterdam 1635645599 -> 1635645599 2021-10-31T02:59:59+0100
  238. Europe/Amsterdam 1635645600 -> 1635645600 2021-10-31T03:00:00+0100
  239. Europe/Amsterdam 1635645601 -> 1635645601 2021-10-31T03:00:01+0100
  240. Europe/Amsterdam 1635649199 -> 1635649199 2021-10-31T03:59:59+0100
  241. Europe/Amsterdam 1635649200 -> 1635649200 2021-10-31T04:00:00+0100
  242. Europe/Amsterdam 1635649201 -> 1635649201 2021-10-31T04:00:01+0100