PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » Date and Time » Date » Bug #5494

%s formatter fails with locales that have a , as a decimal separator

Details

Submitted2005-09-22 13:54 UTC
Fromtorben-spam-pear at nehmer dot net
Assignedpajoye
StatusClosed
PackageDate
PHP Version4.3.10
OSLinux
Roadmaps(Not assigned)

Comments

[2005-09-22 13:54 UTC] torben-spam-pear at nehmer dot net

Description:
------------
Simply put, PHP has the strange behavoir of formatting floats to the current locale unconditionally, but reading them in English one. Check this:

$double = 4.4;
$string = (string) $double;

On a German system, where we have the comma as a decimal separator, $string is now "4,4" *not* "4.4".

This is ok, but the real crap starts when converting back:

$newdouble = (double) $string;

$newdouble is now 4, *not* 4.4, as the string-to-double conversion requires a decimal point, not comma.

This breaks your neck in the %s formatter, which uses %02f in sprintf, which is subject to the same limitation.

This becomes appearant when using the following format call:

$date->format('%Y-%m-%dT%H:%M:%s%O');

It yields:

1946-02-10T15:30:0,000000+00:00

Date then fails to reread that string.

Suggested solution: str_replace(',', '.', $value) or accepting both comma and dot as a separator. Enforcing the same decimal seaparator seams wiser to me though.