diff --git a/ext/date/TODO b/ext/date/TODO index 30ad964f379..f98cb629e73 100644 --- a/ext/date/TODO +++ b/ext/date/TODO @@ -1,5 +1,3 @@ -- Implement INI setting default timezone, for now the env var "TZ" can be - used. - Port over my 200 test cases to .phpt format. - Write an error handler for unexpected characters while parsing dates. - Remove old parsedate.* code from ext/standard diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 8296906fa38..487c0705000 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -33,8 +33,10 @@ function_entry date_functions[] = { {NULL, NULL, NULL} }; +ZEND_DECLARE_MODULE_GLOBALS(date) + PHP_INI_BEGIN() -/* STD_PHP_INI_ENTRY("date.timezone", TIMEZONE_DB_LOCATION, PHP_INI_ALL, OnUpdateString, timezonedb_location, zend_date_globals, date_globals) */ + STD_PHP_INI_ENTRY("date.timezone", "GMT", PHP_INI_ALL, OnUpdateString, default_timezone, zend_date_globals, date_globals) PHP_INI_END() @@ -51,10 +53,17 @@ zend_module_entry date_module_entry = { STANDARD_MODULE_PROPERTIES }; +/* {{{ php_date_init_globals */ +static void php_date_init_globals(zend_date_globals *date_globals) +{ + date_globals->default_timezone = NULL; +} +/* }}} */ PHP_MINIT_FUNCTION(date) { + ZEND_INIT_MODULE_GLOBALS(date, php_date_init_globals, NULL); REGISTER_INI_ENTRIES(); return SUCCESS; @@ -84,6 +93,9 @@ static char* guess_timezone(void) if (env) { return env; } + if (DATEG(default_timezone)) { + return DATEG(default_timezone); + } /* Check config setting */ /* */ diff --git a/ext/date/php_date.h b/ext/date/php_date.h index 67e890e14fc..6e665c798dd 100644 --- a/ext/date/php_date.h +++ b/ext/date/php_date.h @@ -30,5 +30,14 @@ PHP_MINIT_FUNCTION(date); PHP_MSHUTDOWN_FUNCTION(date); PHP_MINFO_FUNCTION(date); +ZEND_BEGIN_MODULE_GLOBALS(date) + char *default_timezone; +ZEND_END_MODULE_GLOBALS(date) + +#ifdef ZTS +#define DATEG(v) TSRMG(date_globals_id, zend_date_globals *, v) +#else +#define DATEG(v) (date_globals.v) +#endif #endif /* PHP_DATE_H */ diff --git a/ext/date/tests/default-timezone-1.phpt b/ext/date/tests/default-timezone-1.phpt new file mode 100644 index 00000000000..9d32b0c7418 --- /dev/null +++ b/ext/date/tests/default-timezone-1.phpt @@ -0,0 +1,10 @@ +--TEST-- +date.timezone setting [1] +--INI-- +date.timezone=GMT +--FILE-- + +--EXPECT-- +1119132944 diff --git a/ext/date/tests/default-timezone-2.phpt b/ext/date/tests/default-timezone-2.phpt new file mode 100644 index 00000000000..85f8d89a77b --- /dev/null +++ b/ext/date/tests/default-timezone-2.phpt @@ -0,0 +1,10 @@ +--TEST-- +date.timezone setting [2] +--INI-- +date.timezone=Europe/Oslo +--FILE-- + +--EXPECT-- +1119125744