]> granicus.if.org Git - php/commitdiff
- Fixed bug #45696 (Not all DateTime methods allow method chaining).
authorDerick Rethans <derick@php.net>
Sun, 3 Aug 2008 16:44:31 +0000 (16:44 +0000)
committerDerick Rethans <derick@php.net>
Sun, 3 Aug 2008 16:44:31 +0000 (16:44 +0000)
ext/date/php_date.c

index 5a31e6be44f91318f68696608e982d9c6121c811..4e1867006ff5ffe85ab4216b08a97a4a2aefe39f 100644 (file)
@@ -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);
 }
 /* }}} */