From: Adam Harvey Date: Tue, 22 Mar 2011 08:33:22 +0000 (+0000) Subject: Fix bug #54340 (DateTime::add() method bug). X-Git-Tag: php-5.3.7RC1~226 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=334d2df892382da8acce5b2bf0f75ea616c4366a;p=php Fix bug #54340 (DateTime::add() method bug). --- diff --git a/NEWS b/NEWS index 19b30dcd43..4ff165a6b0 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,7 @@ PHP NEWS (tomas dot brastavicius at quantum dot lt, Pierrick) - DateTime extension: + . Fixed bug #54340 (DateTime::add() method bug). (Adam) . Fixed bug #54316 (DateTime::createFromFormat does not handle trailing '|' correctly). (Adam) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 73a61c7e94..31470a5eec 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2860,14 +2860,13 @@ PHP_FUNCTION(date_add) if (intobj->diff->invert) { bias = -1; } + memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time)); 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->sse_uptodate = 0; @@ -2907,6 +2906,7 @@ PHP_FUNCTION(date_sub) bias = -1; } + memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time)); dateobj->time->relative.y = 0 - (intobj->diff->y * bias); dateobj->time->relative.m = 0 - (intobj->diff->m * bias); dateobj->time->relative.d = 0 - (intobj->diff->d * bias); @@ -2914,8 +2914,6 @@ PHP_FUNCTION(date_sub) dateobj->time->relative.i = 0 - (intobj->diff->i * bias); dateobj->time->relative.s = 0 - (intobj->diff->s * bias); 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); diff --git a/ext/date/tests/bug54340.phpt b/ext/date/tests/bug54340.phpt new file mode 100644 index 0000000000..7f00309c93 --- /dev/null +++ b/ext/date/tests/bug54340.phpt @@ -0,0 +1,43 @@ +--TEST-- +Bug #54340 (DateTime::add() method bug) +--INI-- +date.timezone=UTC +--FILE-- +add($interval); +var_dump($dt); + +$dt = new DateTime('first day of January 2011'); + +$dt->sub($interval); +var_dump($dt); +--EXPECT-- +object(DateTime)#2 (3) { + ["date"]=> + string(19) "2011-01-01 00:00:00" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" +} +object(DateTime)#2 (3) { + ["date"]=> + string(19) "2011-01-02 00:00:00" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" +} +object(DateTime)#3 (3) { + ["date"]=> + string(19) "2010-12-31 00:00:00" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" +}