From d732859624b70610d371f7cb45c44beff6e86efb Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Sun, 20 Nov 2005 20:31:49 +0000 Subject: [PATCH] - MF51: Fixed bug #35143 (gettimeofday() ignores current time zone). - MF51: Fixed tests due to class constants patch. --- ext/date/php_date.c | 2 +- ext/date/php_date.h | 1 + ext/date/tests/bug34304.phpt | 11 +++++++++++ ext/date/tests/bug35143.phpt | 21 +++++++++++++++++++++ ext/date/tests/date_create-2.phpt | 2 +- ext/date/tests/date_create-3.phpt | 2 ++ ext/date/tests/date_modify-1.phpt | 12 ++++++------ ext/date/tests/date_modify-2.phpt | 4 ++-- ext/standard/microtime.c | 16 ++++++++++------ 9 files changed, 55 insertions(+), 16 deletions(-) create mode 100644 ext/date/tests/bug34304.phpt create mode 100644 ext/date/tests/bug35143.phpt diff --git a/ext/date/php_date.c b/ext/date/php_date.c index f4e887f837..99b9059fbf 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -365,7 +365,7 @@ php_win_std_time: return "UTC"; } -static timelib_tzinfo *get_timezone_info(TSRMLS_D) +PHPAPI timelib_tzinfo *get_timezone_info(TSRMLS_D) { char *tz; timelib_tzinfo *tzi; diff --git a/ext/date/php_date.h b/ext/date/php_date.h index a564fc7a24..17c6d884c1 100644 --- a/ext/date/php_date.h +++ b/ext/date/php_date.h @@ -100,5 +100,6 @@ PHPAPI char *php_format_date(char *format, int format_len, time_t ts, int localt /* Mechanism to set new TZ database */ PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb); +PHPAPI timelib_tzinfo *get_timezone_info(TSRMLS_D); #endif /* PHP_DATE_H */ diff --git a/ext/date/tests/bug34304.phpt b/ext/date/tests/bug34304.phpt new file mode 100644 index 0000000000..a2b26a14c5 --- /dev/null +++ b/ext/date/tests/bug34304.phpt @@ -0,0 +1,11 @@ +--TEST-- +Bug #34304 () +--FILE-- + +--EXPECT-- +2004-W53-7 +2005-W01-7 diff --git a/ext/date/tests/bug35143.phpt b/ext/date/tests/bug35143.phpt new file mode 100644 index 0000000000..02b0072713 --- /dev/null +++ b/ext/date/tests/bug35143.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #35143 (gettimeofday() ignores current time zone) +--FILE-- + +--EXPECTF-- +string(3) "UTC" +array(4) { + ["sec"]=> + int(%d) + ["usec"]=> + int(%d) + ["minuteswest"]=> + int(0) + ["dsttime"]=> + int(0) +} diff --git a/ext/date/tests/date_create-2.phpt b/ext/date/tests/date_create-2.phpt index e3bb1b3348..d7c785e228 100644 --- a/ext/date/tests/date_create-2.phpt +++ b/ext/date/tests/date_create-2.phpt @@ -6,7 +6,7 @@ date_create() function [2] format(DATE_RFC822), "\n"; +echo $d->format(date::RFC822), "\n"; ?> --EXPECT-- Mon, 18 Jul 2005 22:10:00 GMT+0400 diff --git a/ext/date/tests/date_create-3.phpt b/ext/date/tests/date_create-3.phpt index 67be1a03e5..350a4c21d6 100644 --- a/ext/date/tests/date_create-3.phpt +++ b/ext/date/tests/date_create-3.phpt @@ -1,5 +1,7 @@ --TEST-- date_create() function [3] +--SKIPIF-- + --FILE-- modify("+1 second"); -echo date_format($ts, DATE_RFC822), "\n"; +echo date_format($ts, date::RFC822), "\n"; date_default_timezone_set("Europe/Amsterdam"); $ts = date_create("Sun Mar 27 01:59:59 2005"); -echo date_format($ts, DATE_RFC822), "\n"; +echo date_format($ts, date::RFC822), "\n"; $ts->modify("+1 second"); -echo date_format($ts, DATE_RFC822), "\n"; +echo date_format($ts, date::RFC822), "\n"; $ts = date_create("Sun Oct 30 01:59:59 2005"); -echo date_format($ts, DATE_RFC822), "\n"; +echo date_format($ts, date::RFC822), "\n"; $ts->modify("+ 1 hour 1 second"); -echo date_format($ts, DATE_RFC822), "\n"; +echo date_format($ts, date::RFC822), "\n"; ?> --EXPECT-- Thu, 19 Aug 1993 23:59:59 KWAT diff --git a/ext/date/tests/date_modify-2.phpt b/ext/date/tests/date_modify-2.phpt index da22316af0..9bf7a5d2d6 100644 --- a/ext/date/tests/date_modify-2.phpt +++ b/ext/date/tests/date_modify-2.phpt @@ -6,9 +6,9 @@ date_modify() function [2] --EXPECT-- Mon, 18 Jul 2005 22:10:00 GMT+0400 diff --git a/ext/standard/microtime.c b/ext/standard/microtime.c index 5550be3a08..504bd6ceed 100644 --- a/ext/standard/microtime.c +++ b/ext/standard/microtime.c @@ -43,6 +43,7 @@ #include #include "microtime.h" +#include "ext/date/php_date.h" #define NUL '\0' #define MICRO_IN_SEC 1000000.00 @@ -68,15 +69,18 @@ static void _php_gettimeofday(INTERNAL_FUNCTION_PARAMETERS, int mode) } if (mode) { + timelib_time_offset *offset; + + offset = timelib_get_time_zone_info(tp.tv_sec, get_timezone_info(TSRMLS_C)); + array_init(return_value); add_assoc_long(return_value, "sec", tp.tv_sec); add_assoc_long(return_value, "usec", tp.tv_usec); -#ifdef PHP_WIN32 - add_assoc_long(return_value, "minuteswest", tz.tz_minuteswest/SEC_IN_MIN); -#else - add_assoc_long(return_value, "minuteswest", tz.tz_minuteswest); -#endif - add_assoc_long(return_value, "dsttime", tz.tz_dsttime); + + add_assoc_long(return_value, "minuteswest", -offset->offset / SEC_IN_MIN); + add_assoc_long(return_value, "dsttime", offset->is_dst); + + timelib_time_offset_dtor(offset); } else { char ret[100]; -- 2.50.1