php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #50590 IntlDateFormatter::parse result is limited to the integer range
Submitted: 2009-12-28 12:46 UTC Modified: 2010-09-01 22:53 UTC
From: a dot farhadi at gmail dot com Assigned: stas (profile)
Status: Closed Package: I18N and L10N related
PHP Version: 5.3.1 OS: Ubuntu
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: a dot farhadi at gmail dot com
New email:
PHP Version: OS:

 

 [2009-12-28 12:46 UTC] 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)

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-06-20 23:55 UTC] felipe@php.net
-Status: Open +Status: Assigned -Assigned To: +Assigned To: stas
 [2010-06-21 01:42 UTC] stas@php.net
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.
 [2010-06-21 09:59 UTC] 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('en@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-09-01 22:35 UTC] stas@php.net
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-09-01 22:53 UTC] stas@php.net
-Status: Assigned +Status: Closed
 [2010-09-01 22:53 UTC] stas@php.net
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.


 [2010-10-06 19:05 UTC] cataphract@php.net
Automatic comment from SVN on behalf of cataphract
Revision: http://svn.php.net/viewvc/?view=revision&revision=304164
Log: - Fixed test for bug #50590 on systems with 64-bit longs.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Nov 23 08:01:28 2024 UTC