Bug #80963 [Asn->Csd]: DateTimeZone::getTransitions() truncated
| From: | cmb@php.net | Date: | Wed, 22 Sep 2021 09:46:29 +0000 |
| Subject: | Bug #80963 [Asn->Csd]: DateTimeZone::getTransitions() truncated | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-236738@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=80963&edit=1
ID: 80963
Updated by: cmb@php.net
Reported by: thekid@php.net
Summary: DateTimeZone::getTransitions() truncated
-Status: Assigned
+Status: Closed
Type: Bug
Package: Date/time related
Operating System: Windows
PHP Version: master-Git-2021-04-17 (Git)
Assigned To: derick
Block user comment: N
Private report: N
New Comment:
> The fix for this bug has been committed.
So this ticket can be closed.
Previous Comments:
------------------------------------------------------------------------
[2021-08-08 16:28:04] derick@php.net
The fix for this bug has been committed.
If you are still experiencing this bug, try to check out latest source from https://github.com/php/php-src and re-test.
Thank you for the report, and for helping us make PHP better.
Fixed for 8.1.0beta3.
------------------------------------------------------------------------
[2021-08-08 16:27:42] git@php.net
Automatic comment on behalf of derickr
Revision: https://github.com/php/php-src/commit/d9c8e5a42e2f593319ce7b682d43f1f6eb42512e
Log: Fixed bug #80963: DateTimeZone::getTransitions() truncated
------------------------------------------------------------------------
[2021-04-18 13:52:44] derick@php.net
This is a tricky one. The data format that the library uses has changed, and will now only contain a
list of transitions up until the last time the *rules* changed.
For America/New_York, that was in 2007, and Europe/London, in 1996. Beyond that, the timelib library
now can calculate the offset for a specific timestamp: https://github.com/derickr/timelib/blob/master/parse_tz.c#L777
and also from this new POSIX string format through https://github.com/derickr/timelib/blob/master/parse_posix.c
â What is no longer available is a list with ever single utc-offset change, which is what
powered this getTransitions function.
------------------------------------------------------------------------
[2021-04-17 15:54:07] thekid@php.net
When given min and max timestamps, we simply get the passed-in timestamp back in UTC
# PHP 8.1-dev
php-r '$tz= new DateTimeZone("America/Los_Angeles"); $t=
$tz->getTransitions(time(), time() + 31536000); var_dump($t);' | grep 'string(24)'
string(24) "2021-04-17T15:50:22+0000"
# PHP 8.0.3
php-r '$tz= new DateTimeZone("America/Los_Angeles"); $t=
$tz->getTransitions(time(), time() + 31536000); var_dump($t);' | grep 'string(24)'
string(24) "2021-04-17T15:52:43+0000"
string(24) "2021-11-07T09:00:00+0000"
string(24) "2022-03-13T10:00:00+0000"
------------------------------------------------------------------------
[2021-04-17 15:45:26] thekid@php.net
For Europe/Berlin and Europe/London, the array returned "stops" at 1996
For America/New_York, the latest transition returned is from 2007
# PHP 8.1-dev
$ php -r '$tz= new DateTimeZone("America/New_York"); $t= $tz->getTransitions();
var_dump($t);' | grep 'string(24)' | sort -r | head -5
string(24) "2007-03-11T07:00:00+0000"
string(24) "2006-10-29T06:00:00+0000"
string(24) "2006-04-02T07:00:00+0000"
string(24) "2005-10-30T06:00:00+0000"
string(24) "2005-04-03T07:00:00+0000"
# PHP 8.0.3
$ php -r '$tz= new DateTimeZone("America/New_York"); $t= $tz->getTransitions();
var_dump($t);' | grep 'string(24)' | sort -r | head -5
string(24) "2037-11-01T06:00:00+0000"
string(24) "2037-03-08T07:00:00+0000"
string(24) "2036-11-02T06:00:00+0000"
string(24) "2036-03-09T07:00:00+0000"
string(24) "2035-11-04T06:00:00+0000"
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=80963
--
Edit this bug report at https://bugs.php.net/bug.php?id=80963&edit=1