|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2021-03-22 19:01 UTC] ctiancheng at fb dot com
Description: ------------ --- From manual page: https://php.net/timezones.america --- America/Havana and Asia/Tehran are two supported timezones listed from the documentation. However, The DateTime are not handled correctly during daylight time transition. This happens when doing $dt->add(new DateInterval('P1D')); On e.g. 2021/03/14 for America/Havana On e.g. 2021/03/21 for Asia/Tehran Test script: --------------- // http://sandbox.onlinephpfunctions.com/code/0650352a9684872c8dcfff00a64b11660a56eba8 $local_timezone_name = 'America/Havana'; $timestamp = 1615611600; // local time 3/13/21 0:00 $time = (new DateTime())->setTimestamp($timestamp) ->setTimezone(new DateTimeZone($local_timezone_name)); $time->add(new DateInterval('P1D')); // local time 03/13/21 1:00 // http://sandbox.onlinephpfunctions.com/code/623d5587f5453dd487492e5fde64cc836a84dcd9 $local_timezone_name = 'Asia/Tehran'; $timestamp = 1616272200; // local time 3/21/21 0:00 $time = (new DateTime())->setTimestamp($timestamp) ->setTimezone(new DateTimeZone($local_timezone_name)); $time->add(new DateInterval('P1D')); // local time 03/22/21 1:00 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Dec 14 18:00:02 2025 UTC |
FWIW, zdump -v America/Havana -c 2021,2022 gives: America/Havana Sun Mar 14 04:59:59 2021 UT = Sat Mar 13 23:59:59 2021 CST isdst=0 gmtoff=-18000 America/Havana Sun Mar 14 05:00:00 2021 UT = Sun Mar 14 01:00:00 2021 CDT isdst=1 gmtoff=-14400 Which indicates that "Sun Mar 14 00:00:00" does not exist. Sat Mar 13 23:59:59 is followed by Sun Mar 14 01:00:00. Tehran has the same issue a week later: Asia/Tehran Sun Mar 21 20:29:59 2021 UT = Sun Mar 21 23:59:59 2021 +0330 isdst=0 gmtoff=12600 Asia/Tehran Sun Mar 21 20:30:00 2021 UT = Mon Mar 22 01:00:00 2021 +0430 isdst=1 gmtoff=16200 Los Angeles exhibits the same problem for "02:00 am": $ php -ddate.timezone=America/Los_Angeles -r 'echo (new DateTime("2021-03-13 02:00"))->add(new DateInterval("P1D"))->format( DateTime::ISO8601 );' 2021-03-14T03:00:00-0700