Edit report at http://bugs.php.net/bug.php?id=50590&edit=1
ID: 50590 Updated by: [email protected] Reported by: a dot farhadi at gmail dot com Summary: IntlDateFormatter::parse result is limited to the integer range -Status: Assigned +Status: Closed Type: Bug Package: I18N and L10N related Operating System: Ubuntu PHP Version: 5.3.1 Assigned To: stas Block user comment: N New Comment: This bug has been fixed in SVN. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2010-09-01 22:35:01] [email protected] Automatic comment from SVN on behalf of stas Revision: http://svn.php.net/viewvc/?view=revision&revision=302982 Log: Fix bug #50590 - IntlDateFormatter::parse result is limited to the integer range ------------------------------------------------------------------------ [2010-06-21 09:59:41] a dot farhadi at gmail dot com Actually what I want to do is to convert dates between different calendars and to do so I'm using the returned timestamp with IntlDateFormatter::format method as follow: $df_persian = new IntlDateFormatter('e...@calendar=persian', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::GREGORIAN, 'yyyy-MM-dd'); $df_gregorian = new IntlDateFormatter('en', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::GREGORIAN, 'yyyy-MM-dd'); echo $df_gregorian->format($df_persian->parse('1388-03-31')); Hopefully, format method accepts float values as argument and the only problem is parse method which doesn't return past-2038 timestamps. And by the way float precision loss wouldn't be a problem at least for timestamps up to 14 decimal digits. ------------------------------------------------------------------------ [2010-06-21 01:42:27] [email protected] Out of curiosity - how do you expect to use past-2038 timestamps? Many Unix systems won't support those. Do you expect 64-bit value or some other way? float might be not very good for it due to the precision loss. ------------------------------------------------------------------------ [2009-12-28 12:46:06] a dot farhadi at gmail dot com Description: ------------ The result of IntlDateFormatter::parse is integer and is limited to the integer range. (i.e. IntlDateFormatter::parse returns The least integer value (e.g. -2147483648 in 32-bit Platforms) when the result is out of the integer range.) Reproduce code: --------------- $fmt = new IntlDateFormatter("en_US", IntlDateFormatter::FULL, IntlDateFormatter::FULL); var_dump($fmt->parse("Wednesday, January 20, 2038 3:14:07 AM GMT")); Expected result: ---------------- float(2147570047) Actual result: -------------- int(-2147483648) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=50590&edit=1
