summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/date/php_date.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index ca8d3a4ed4..5aa3b8766e 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -1544,9 +1544,22 @@ static void date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int
{
timelib_time *now;
timelib_tzinfo *tzi;
+ timelib_error_container *err = NULL;
int free_tzi = 0;
- dateobj->time = timelib_strtotime(time_str_len ? time_str : "now", time_str_len ? time_str_len : sizeof("now") -1, NULL, DATE_TIMEZONEDB);
+ if (dateobj->time) {
+ if (dateobj->time->tz_info) {
+ timelib_tzinfo_dtor(dateobj->time->tz_info);
+ }
+ timelib_time_dtor(dateobj->time);
+ }
+ dateobj->time = timelib_strtotime(time_str_len ? time_str : "now", time_str_len ? time_str_len : sizeof("now") -1, &err, DATE_TIMEZONEDB);
+ if (err) {
+ if (err->error_count) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to parse time string (%s)", time_str);
+ }
+ timelib_error_container_dtor(err);
+ }
if (timezone_object) {
php_timezone_obj *tzobj;
@@ -1599,8 +1612,9 @@ PHP_METHOD(DateTime, __construct)
int time_str_len = 0;
if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) {
- /* TODO: throw Exception on unparseable dates */
+ php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, timezone_object TSRMLS_CC);
+ php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
}
}