com php-src: Fixed bug #73837 ("new DateTime()" sometimes returns 1 second ago value).: NEWS ext/date/php_date.c
[email protected] (Derick Rethans)
| Newsgroups | php.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: 5113909259f897c9c69f23cf5f8f7ab8972d5eba Author: Derick Rethans <[email protected]> Sat, 11 Feb 2017 11:10:01 +0000 Parents: 808a11041d496ba86d319bb706a711d6b2489942 Branches: PHP-7.1 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=5113909259f897c9c69f23cf5f8f7ab8972d5eba Log: Fixed bug #73837 ("new DateTime()" sometimes returns 1 second ago value). Bugs: https://bugs.php.net/73837 Changed paths: M NEWS M ext/date/php_date.c Diff: diff --git a/NEWS b/NEWS index 299f4e8..302da8d 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,10 @@ PHP NEWS . Fixed bug #61471 (Incomplete POST does not timeout but is passed to PHP). (Zheng Shao) +- Date: + . Fixed bug #73837 ("new DateTime()" sometimes returns 1 second ago value). + (Derick) + - GD: . Fixed bug #74031 (ReflectionFunction for imagepng is missing last two parameters). (finwe) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index fe1cbe2..6bc1803 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2549,15 +2549,17 @@ static void php_date_set_time_fraction(timelib_time *time, int microseconds) time->f = microseconds / 1000000; } -static void php_date_set_current_time_fraction(timelib_time *time) +static void php_date_get_current_time_with_fraction(time_t *sec, suseconds_t *usec) { #if HAVE_GETTIMEOFDAY struct timeval tp = {0}; /* For setting microseconds */ gettimeofday(&tp, NULL); - timelib_set_fraction_from_timeval(time, tp); + *sec = tp.tv_sec; + *usec = tp.tv_usec; #else - time->f = 0; + *sec = time(NULL); + *usec = 0; #endif } @@ -2569,6 +2571,8 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int type = TIMELIB_ZONETYPE_ID, new_dst = 0; char *new_abbr = NULL; timelib_sll new_offset = 0; + time_t sec; + suseconds_t usec; if (dateobj->time) { timelib_time_dtor(dateobj->time); @@ -2633,8 +2637,9 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, now->tz_abbr = new_abbr; break; } - timelib_unixtime2local(now, (timelib_sll) time(NULL)); - php_date_set_current_time_fraction(now); + php_date_get_current_time_with_fraction(&sec, &usec); + timelib_unixtime2local(now, (timelib_sll) sec); + php_date_set_time_fraction(now, usec); timelib_fill_holes(dateobj->time, now, TIMELIB_NO_CLONE); timelib_update_ts(dateobj->time, tzi); timelib_update_from_sse(dateobj->time);