diff options
-rwxr-xr-x | UPGRADING | 3 | ||||
-rwxr-xr-x | ext/intl/msgformat/msgformat_helpers.cpp | 6 | ||||
-rw-r--r-- | ext/intl/tests/msgfmt_millisecond_dates.phpt | 31 |
3 files changed, 35 insertions, 5 deletions
@@ -57,6 +57,9 @@ PHP X.Y UPGRADE NOTES - MessageFormatter::format() and related functions now don't error out when an insufficient argument count is provided. Instead, the placeholders will remain unsubstituted. +- MessageFormatter::parse() and MessageFormat::format() (and their static + equivalents) now don't throw away better than second precision in the + arguments. ======================================== 5. New Functions diff --git a/ext/intl/msgformat/msgformat_helpers.cpp b/ext/intl/msgformat/msgformat_helpers.cpp index 42c5466153..f8228df4d3 100755 --- a/ext/intl/msgformat/msgformat_helpers.cpp +++ b/ext/intl/msgformat/msgformat_helpers.cpp @@ -665,11 +665,7 @@ U_CFUNC void umsg_parse_helper(UMessageFormat *fmt, int *count, zval ***args, UC switch(fargs[i].getType()) { case Formattable::kDate: aDate = ((double)fargs[i].getDate())/U_MILLIS_PER_SECOND; - if(aDate > LONG_MAX || aDate < -LONG_MAX) { - ZVAL_DOUBLE((*args)[i], aDate<0?ceil(aDate):floor(aDate)); - } else { - ZVAL_LONG((*args)[i], (long)aDate); - } + ZVAL_DOUBLE((*args)[i], aDate); break; case Formattable::kDouble: diff --git a/ext/intl/tests/msgfmt_millisecond_dates.phpt b/ext/intl/tests/msgfmt_millisecond_dates.phpt new file mode 100644 index 0000000000..6d6cf20491 --- /dev/null +++ b/ext/intl/tests/msgfmt_millisecond_dates.phpt @@ -0,0 +1,31 @@ +--TEST-- +MessageFrormatter parses and formats dates with millisecond precision +--SKIPIF-- +<?php +if (!extension_loaded('intl')) + die('skip intl extension not enabled'); +--FILE-- +<?php +exec('pause'); +ini_set("intl.error_level", E_WARNING); +//ini_set("intl.default_locale", "nl"); +date_default_timezone_set('Europe/Lisbon'); //ignored for now, see bug #58756 + +$d = 1336308097.123; +$mf = new MessageFormatter('en_US', + "On {0,time,yyyy-MM-dd G 'at' HH:mm:ss.SSS zzz} something odd happened"); + +var_dump($mf->format(array(1336310569.123))); + +$p = 'On 2012-05-06 AD at 15:22:49.123 GMT+02:00 something odd happened'; +var_dump($mf->parse($p)); + +?> +==DONE== +--EXPECTF-- +string(%d) "On 2012-05-0%d AD at %d:%d:49.123 %s something odd happened" +array(1) { + [0]=> + float(1336310569.123) +} +==DONE==
\ No newline at end of file |