diff --git a/ext/date/php_date.c b/ext/date/php_date.c index f4e887f837a..99b9059fbf4 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 a564fc7a249..17c6d884c14 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 00000000000..a2b26a14c53 --- /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 00000000000..02b0072713d --- /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 e3bb1b33480..d7c785e2287 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 67be1a03e5c..350a4c21d66 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 da22316af03..9bf7a5d2d60 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 5550be3a088..504bd6ceedd 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];