From 3e7446f0e7029f7455a6973b646b03bf897d2597 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Sat, 18 Jun 2005 20:23:19 +0000 Subject: [PATCH] - Allow default timezone to be set with the .ini setting "date.timezone". --- ext/date/TODO | 2 -- ext/date/php_date.c | 14 +++++++++++++- ext/date/php_date.h | 9 +++++++++ ext/date/tests/default-timezone-1.phpt | 10 ++++++++++ ext/date/tests/default-timezone-2.phpt | 10 ++++++++++ 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 ext/date/tests/default-timezone-1.phpt create mode 100644 ext/date/tests/default-timezone-2.phpt diff --git a/ext/date/TODO b/ext/date/TODO index 30ad964f37..f98cb629e7 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 8296906fa3..487c070500 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 67e890e14f..6e665c798d 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 0000000000..9d32b0c741 --- /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 0000000000..85f8d89a77 --- /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 -- 2.50.1