ID: 48058 User updated by: wharmby at uk dot ibm dot com Reported By: wharmby at uk dot ibm dot com Status: Assigned Bug Type: Date/time related Operating System: Linux 64 bit PHP Version: 5.3CVS-2009-04-23 (snap) Assigned To: derick New Comment:
Hi Derick Thanks for atking a look at this. I can see why we end up with the bogus looking entry given that "timestamp_begin" is initialized to LONG_MIN its just that the output is not what I expected to see and I believe it will confuse other users who are perhaps not aware of how the results array is being built. Also given that the remaining entries in the array are the same and we don't produce more transitions (going further into past) on 64 bit would it not make more sense to initialize timestamp_begin to -2147483648 regardless of platform rather than using LON_MIN ? I realize this is a minor issue and there are probably more important issues that need your attention but I do believe the current output will confuse someone some day Regards Andy Previous Comments: ------------------------------------------------------------------------ [2009-04-23 12:35:30] der...@php.net It looks bogus, but it is (sortof) correct. If you go -9223372036854775808 seconds back from 1970-01-01 you end up at a date 219 billion years in the past. Not sure why it formats wrong though. ------------------------------------------------------------------------ [2009-04-23 08:57:58] wharmby at uk dot ibm dot com Description: ------------ First entry in array returned by DateTimeZone method getTransitions (and function timezone_transitions_get()looks bogus on 64 bit systems. I expected same result when running this command on 32 and 64 bit systems. Problem affects current levels of PHP 5.3 and 6.0 (snapshot timestamp == Wed 22-04-2009 6:30:00 ) only. Looks like problem caused by use of constant LONG_MIN at around line 3218 in current src of ext/dates/date.c introduced by the following change: ===================================================================== Revision 1.43.2.45.2.51.2.28 - (view) (download) (as text) (annotate) - [select for diffs] Thu Mar 20 19:43:36 2008 UTC (13 months ago) by derick Branch: PHP_5_3 Changes since 1.43.2.45.2.51.2.27: +57 -24 lines Diff to previous 1.43.2.45.2.51.2.27 , to branch point 1.43.2.45.2.51 - MFH: Fix the DateTimeZone::getTransitions() algorithm. ====================================================================== Reproduce code: --------------- <?php date_default_timezone_set("Europe/London"); $tz = new DateTimeZone("Europe/London"); $tran = $tz->getTransitions(); var_dump( $tran ); ?> Expected result: ---------------- (as produced by same code running on Linux 32 bits system) array(243) { [0]=> array(5) { ["ts"]=> int(-2147483648) ["time"]=> string(24) "1901-12-13T20:45:52+0000" ["offset"]=> int(3600) ["isdst"]=> bool(true) ["abbr"]=> string(3) "BST" } Actual result: -------------- array(243) { [0]=> array(5) { ["ts"]=> int(-9223372036854775808) <- == LONG_MIN ["time"]=> string(30) "-219246529-01-27T08:29:52+0000" <- Bogus looking entry ["offset"]=> int(3600) ["isdst"]=> bool(true) ["abbr"]=> string(3) "BST" } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=48058&edit=1