Bug #80995 [Opn]: Europe DateTimeZone bug in specific DateTime interval

From: Date: Fri, 30 Apr 2021 15:16:22 +0000
Subject: Bug #80995 [Opn]: Europe DateTimeZone bug in specific DateTime interval
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-233627@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80995&edit=1

 ID:                 80995
 Updated by:         cmb@php.net
 Reported by:        loic dot geny at gmail dot com
 Summary:            Europe DateTimeZone bug in specific DateTime
                     interval
 Status:             Open
 Type:               Bug
 Package:            Date/time related
 Operating System:   Ubuntu 20.04.2 LTS
 PHP Version:        7.4.16
 Block user comment: N
 Private report:     N

 New Comment:

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());
?>


Previous Comments:
------------------------------------------------------------------------
[2021-04-28 08:30:12] loic dot geny at gmail dot com

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)

------------------------------------------------------------------------
[2021-04-28 08:27:46] loic dot geny at gmail dot com

I'm sorry because I cannot reproduce the bug in a PHP sandbox, I'm still a noob in pure
PHP ...

------------------------------------------------------------------------
[2021-04-28 08:26:16] loic dot geny at gmail dot com

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)

------------------------------------------------------------------------
[2021-04-27 14:56:18] derick@php.net

What is date.timezone set to? Please add that to your reproduce script.

------------------------------------------------------------------------
[2021-04-27 13:33:16] 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'


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=80995&edit=1


Thread (7 messages)

« previous php.bugs (#233627) next »