summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandrewnester <andrew.nester.dev@gmail.com>2017-03-24 19:23:15 +0300
committerNikita Popov <nikita.ppv@gmail.com>2017-04-09 12:56:21 +0200
commit1ce355abb648dc6814ddd00876085617a946396f (patch)
tree1b84f373066aa3c58a520ce61b3b407559249868
parenta813cebff082398f0bbdb0d95ece10ea14b9d946 (diff)
downloadphp-git-1ce355abb648dc6814ddd00876085617a946396f.tar.gz
Fixed #74298 - IntlDateFormatter->format() doesn't return microseconds/fractions
-rw-r--r--NEWS2
-rw-r--r--ext/intl/common/common_date.cpp5
-rw-r--r--ext/intl/tests/bug74298.phpt30
3 files changed, 36 insertions, 1 deletions
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--
+<?php if (!extension_loaded('intl')) print 'skip'; ?>
+--FILE--
+<?php
+var_dump((new \DateTime('2017-01-01 01:02:03.123456'))->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"