|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2021-04-27 13:33 UTC] loic dot geny at gmail dot com
Description:
------------
IntlTimeZone::createTimeZone('Europe/Paris')->toDateTimeZone();
With date between 1940/01/01 and 1940/06/14, apply the DateTimeZone don't output the correct DateTimeImmutable::format('Y-m-d)
Test script:
---------------
$timeZone = IntlTimeZone::createTimeZone('Europe/Paris')->toDateTimeZone();
$date = DateTimeImmutable::createFromFormat('Y-m-d H:i:s','1940-06-13 23:00:00');
$timeZonedDate = $date->setTimeZone($timeZone);
echo $timeZonedDate->format('Y-m-d');
$date = DateTimeImmutable::createFromFormat('Y-m-d H:i:s','1940-06-14 23:00:00');
$timeZonedDate = $date->setTimeZone($timeZone);
echo $timeZonedDate->format('Y-m-d');
Expected result:
----------------
Expected result :
'1940-06-14'
'1940-06-15'
Actual result:
--------------
Current result :
'1940-06-13'
'1940-06-15'
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 05:00:01 2025 UTC |
It's hard to reproduce because I'm working on Symfony. My DateTimeImmutable has date.timezone_type = 1 date.timezone = "+00:00" But here is a more accuracte sample of what is my "state" when the bug occures : $timeZoneTl = IntlTimeZone::createTimeZone('Europe/Paris')->toDateTimeZone(); $dateT = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '1940-06-13 22:00:00', new DateTimeZone('Etc/GMT-0')); $timeZonedDateT = $dateT->setTimezone($timeZoneTl); echo $timeZonedDateT->format('Y-m-d'); Output : 13/06/1940 (wrong) $timeZoneTl = IntlTimeZone::createTimeZone('Europe/Paris')->toDateTimeZone(); $dateT = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '1940-06-15 22:00:00', new DateTimeZone('Etc/GMT-0')); $timeZonedDateT = $dateT->setTimezone($timeZoneTl); echo $timeZonedDateT->format('Y-m-d'); Output : 15/06/1940 (correct)We cant edit comment ? Sorry (again) , but the correct output is : $timeZoneTl = IntlTimeZone::createTimeZone('Europe/Paris')->toDateTimeZone(); $dateT = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '1940-06-15 22:00:00', new DateTimeZone('Etc/GMT-0')); $timeZonedDateT = $dateT->setTimezone($timeZoneTl); echo $timeZonedDateT->format('Y-m-d'); Output : 16/06/1940 (correct)Derick is referring to the date.timezone in php.ini. What output does running the following script produce? <?php var_dump(ini_get("date.timezone")); var_dump(date_default_timezone_get()); ?>