diff options
author | Remi Collet <remi@php.net> | 2012-12-01 10:24:02 +0100 |
---|---|---|
committer | Remi Collet <remi@php.net> | 2012-12-01 10:24:02 +0100 |
commit | 92a5e4def0c9e6e12a5641aa041cac5bbee71646 (patch) | |
tree | 6f25b40c03096b0990ac6b96d0ce52eeaeb4d73c | |
parent | 35f636019dbc969fd33dace041814b7b8d2ae3bf (diff) | |
parent | c2554b4bb43700ae16db34d9706db1db85ec78a4 (diff) | |
download | php-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.c | 2 | ||||
-rw-r--r-- | ext/date/tests/bug45554.phpt | 4 | ||||
-rw-r--r-- | ext/date/tests/bug63435.phpt | 16 |
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 |