From 1ce355abb648dc6814ddd00876085617a946396f Mon Sep 17 00:00:00 2001 From: andrewnester Date: Fri, 24 Mar 2017 19:23:15 +0300 Subject: [PATCH] Fixed #74298 - IntlDateFormatter->format() doesn't return microseconds/fractions --- NEWS | 2 ++ ext/intl/common/common_date.cpp | 5 ++++- ext/intl/tests/bug74298.phpt | 30 ++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 ext/intl/tests/bug74298.phpt diff --git a/NEWS b/NEWS index ab04592f7e..2fbfa00756 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,8 @@ PHP NEWS - Intl: . Fixed bug #65683 (Intl does not support DateTimeImmutable). (Ben Scholzen) + . Fixed bug #74298 (IntlDateFormatter->format() doesn't return + microseconds/fractions). (Andrew Nester) - OpenSSL: . Fixed bug #74341 (openssl_x509_parse fails to parse ASN.1 UTCTime without diff --git a/ext/intl/common/common_date.cpp b/ext/intl/common/common_date.cpp index 98c6393a84..26c198bc42 100644 --- a/ext/intl/common/common_date.cpp +++ b/ext/intl/common/common_date.cpp @@ -125,6 +125,8 @@ U_CFUNC int intl_datetime_decompose(zval *z, double *millis, TimeZone **tz, } if (millis) { + php_date_obj *datetime; + ZVAL_STRING(&zfuncname, "getTimestamp"); if (call_user_function(NULL, z, &zfuncname, &retval, 0, NULL) != SUCCESS || Z_TYPE(retval) != IS_LONG) { @@ -137,7 +139,8 @@ U_CFUNC int intl_datetime_decompose(zval *z, double *millis, TimeZone **tz, return FAILURE; } - *millis = U_MILLIS_PER_SECOND * (double)Z_LVAL(retval); + datetime = Z_PHPDATE_P(z); + *millis = U_MILLIS_PER_SECOND * ((double)Z_LVAL(retval) + datetime->time->f); zval_ptr_dtor(&zfuncname); } diff --git a/ext/intl/tests/bug74298.phpt b/ext/intl/tests/bug74298.phpt new file mode 100644 index 0000000000..0600a46b9c --- /dev/null +++ b/ext/intl/tests/bug74298.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #74298 (IntlDateFormatter->format() doesn't return microseconds/fractions) +--SKIPIF-- + +--FILE-- +format('Y-m-d\TH:i:s.u')); + +var_dump((new \IntlDateFormatter( + 'en-US', + \IntlDateFormatter::FULL, + \IntlDateFormatter::FULL, + 'UTC', + \IntlDateFormatter::GREGORIAN, + 'yyyy-MM-dd HH:mm:ss.SSSSSS' +))->format(new \DateTime('2017-01-01 01:02:03.123456'))); + +var_dump(datefmt_create( + 'en-US', + \IntlDateFormatter::FULL, + \IntlDateFormatter::FULL, + 'UTC', + \IntlDateFormatter::GREGORIAN, + 'yyyy-MM-dd HH:mm:ss.SSSSSS' +)->format(new \DateTime('2017-01-01 01:02:03.123456'))); +?> +--EXPECTF-- +string(26) "2017-01-01T01:02:03.123456" +string(26) "2017-01-01 01:02:03.123000" +string(26) "2017-01-01 01:02:03.123000" -- 2.40.0