diff options
author | Derick Rethans <derick@php.net> | 2008-08-03 16:44:31 +0000 |
---|---|---|
committer | Derick Rethans <derick@php.net> | 2008-08-03 16:44:31 +0000 |
commit | d84a4ed4aba6e1452bc65e507260bc1320206efe (patch) | |
tree | bcb624a7ae7bbb297117c5455453a519f518084f /ext/date | |
parent | c9c53d7bcd6291400808e48c4b9690a0414034df (diff) | |
download | php-git-d84a4ed4aba6e1452bc65e507260bc1320206efe.tar.gz |
- Fixed bug #45696 (Not all DateTime methods allow method chaining).
Diffstat (limited to 'ext/date')
-rw-r--r-- | ext/date/php_date.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 5a31e6be44..4e1867006f 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2992,23 +2992,29 @@ PHP_FUNCTION(date_add) intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval); - if (intobj->diff->invert) { - bias = -1; - } - dateobj->time->relative.y = intobj->diff->y * bias; - dateobj->time->relative.m = intobj->diff->m * bias; - dateobj->time->relative.d = intobj->diff->d * bias; - dateobj->time->relative.h = intobj->diff->h * bias; - dateobj->time->relative.i = intobj->diff->i * bias; - dateobj->time->relative.s = intobj->diff->s * bias; + if (intobj->diff->have_weekday_relative || intobj->diff->have_special_relative) { + memcpy(&dateobj->time->relative, intobj->diff, sizeof(struct timelib_rel_time)); + } else { + if (intobj->diff->invert) { + bias = -1; + } + dateobj->time->relative.y = intobj->diff->y * bias; + dateobj->time->relative.m = intobj->diff->m * bias; + dateobj->time->relative.d = intobj->diff->d * bias; + dateobj->time->relative.h = intobj->diff->h * bias; + dateobj->time->relative.i = intobj->diff->i * bias; + dateobj->time->relative.s = intobj->diff->s * bias; + dateobj->time->relative.weekday = 0; + dateobj->time->relative.have_weekday_relative = 0; + } dateobj->time->have_relative = 1; - dateobj->time->relative.weekday = 0; - dateobj->time->relative.have_weekday_relative = 0; dateobj->time->sse_uptodate = 0; timelib_update_ts(dateobj->time, NULL); timelib_update_from_sse(dateobj->time); + + RETURN_ZVAL(object, 1, 0); } /* }}} */ @@ -3047,6 +3053,8 @@ PHP_FUNCTION(date_sub) timelib_update_ts(dateobj->time, NULL); timelib_update_from_sse(dateobj->time); + + RETURN_ZVAL(object, 1, 0); } /* }}} */ |