Bug #80963 [Asn->Csd]: DateTimeZone::getTransitions() truncated

From: 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

« previous php.bugs (#236738) next »