summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemi Collet <remi@php.net>2012-12-01 10:24:02 +0100
committerRemi Collet <remi@php.net>2012-12-01 10:24:02 +0100
commit92a5e4def0c9e6e12a5641aa041cac5bbee71646 (patch)
tree6f25b40c03096b0990ac6b96d0ce52eeaeb4d73c
parent35f636019dbc969fd33dace041814b7b8d2ae3bf (diff)
parentc2554b4bb43700ae16db34d9706db1db85ec78a4 (diff)
downloadphp-git-92a5e4def0c9e6e12a5641aa041cac5bbee71646.tar.gz
Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3: Fixed Bug #63435 Datetime::format('u') sometimes wrong by 1 microsecond
-rw-r--r--ext/date/php_date.c2
-rw-r--r--ext/date/tests/bug45554.phpt4
-rw-r--r--ext/date/tests/bug63435.phpt16
3 files changed, 19 insertions, 3 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 13e7b753d3..893a9d6395 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -1023,7 +1023,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
case 'H': length = slprintf(buffer, 32, "%02d", (int) t->h); break;
case 'i': length = slprintf(buffer, 32, "%02d", (int) t->i); break;
case 's': length = slprintf(buffer, 32, "%02d", (int) t->s); break;
- case 'u': length = slprintf(buffer, 32, "%06d", (int) floor(t->f * 1000000)); break;
+ case 'u': length = slprintf(buffer, 32, "%06d", (int) floor(t->f * 1000000 + 0.5)); break;
/* timezone */
case 'I': length = slprintf(buffer, 32, "%d", localtime ? offset->is_dst : 0); break;
diff --git a/ext/date/tests/bug45554.phpt b/ext/date/tests/bug45554.phpt
index 0e9ebfd140..a5042ffb1c 100644
--- a/ext/date/tests/bug45554.phpt
+++ b/ext/date/tests/bug45554.phpt
@@ -9,12 +9,12 @@ $d = date_create_from_format($format, "03-15-2005 12:22:29.000000 PST");
echo $d->format($format), "\n";
$d = date_create_from_format($format, "03-15-2005 12:22:29.001001 PST");
-echo $d->format($format), " (precision isn't enough to show the 1 here)\n";
+echo $d->format($format), "\n";
$d = date_create_from_format($format, "03-15-2005 12:22:29.0010 PST");
echo $d->format($format), "\n";
?>
--EXPECT--
03-15-2005 12:22:29.000000 PST
-03-15-2005 12:22:29.001000 PST (precision isn't enough to show the 1 here)
+03-15-2005 12:22:29.001001 PST
03-15-2005 12:22:29.001000 PST
diff --git a/ext/date/tests/bug63435.phpt b/ext/date/tests/bug63435.phpt
new file mode 100644
index 0000000000..dcec6e46e7
--- /dev/null
+++ b/ext/date/tests/bug63435.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #63435 Datetime::format('u') sometimes wrong by 1 microsecond
+--INI--
+date.timezone=UTC
+--FILE--
+<?php
+for ($i=1 ; $i<999 ; $i++) {
+ $datetime = Datetime::createFromFormat("u", sprintf("%06ld", $i));
+ $res = $datetime->format("u");
+ if ($res != $i) {
+ echo "$i != $res\n";
+ }
+}
+echo "Done";
+--EXPECT--
+Done