svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/ext/date/php_date.c branches/PHP_5_3/ext/date/tests/bug54340.phpt trunk/ext/date/php_date.c
trunk/ext/date/tests/bug54340.phpt
| From: | Adam Harvey | Date: | Tue, 22 Mar 2011 08:33:22 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/ext/date/php_date.c branches/PHP_5_3/ext/date/tests/bug54340.phpt trunk/ext/date/php_date.c trunk/ext/date/tests/bug54340.phpt |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-64733@lists.php.net to get a copy of this message | ||
aharvey Tue, 22 Mar 2011 08:33:22 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=309535
Log:
Fix bug #54340 (DateTime::add() method bug).
Bug: http://bugs.php.net/54340 (Assigned) DateTime::add()
method bug
Changed paths:
U php/php-src/branches/PHP_5_3/NEWS
U php/php-src/branches/PHP_5_3/ext/date/php_date.c
A php/php-src/branches/PHP_5_3/ext/date/tests/bug54340.phpt
U php/php-src/trunk/ext/date/php_date.c
A php/php-src/trunk/ext/date/tests/bug54340.phpt
Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS 2011-03-22 08:27:33 UTC (rev 309534)
+++ php/php-src/branches/PHP_5_3/NEWS 2011-03-22 08:33:22 UTC (rev 309535)
@@ -10,6 +10,7 @@
(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)
Modified: php/php-src/branches/PHP_5_3/ext/date/php_date.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/php_date.c 2011-03-22 08:27:33 UTC (rev 309534)
+++ php/php-src/branches/PHP_5_3/ext/date/php_date.c 2011-03-22 08:33:22 UTC (rev 309535)
@@ -2860,14 +2860,13 @@
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 @@
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 @@
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);
Added: php/php-src/branches/PHP_5_3/ext/date/tests/bug54340.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/tests/bug54340.phpt (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/date/tests/bug54340.phpt 2011-03-22 08:33:22 UTC (rev 309535)
@@ -0,0 +1,43 @@
+--TEST--
+Bug #54340 (DateTime::add() method bug)
+--INI--
+date.timezone=UTC
+--FILE--
+<?php
+$interval = new DateInterval('P1D');
+
+$dt = new DateTime('first day of January 2011');
+var_dump($dt);
+
+$dt->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"
+}
Modified: php/php-src/trunk/ext/date/php_date.c
===================================================================
--- php/php-src/trunk/ext/date/php_date.c 2011-03-22 08:27:33 UTC (rev 309534)
+++ php/php-src/trunk/ext/date/php_date.c 2011-03-22 08:33:22 UTC (rev 309535)
@@ -2855,14 +2855,13 @@
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;
@@ -2902,6 +2901,7 @@
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);
@@ -2909,8 +2909,6 @@
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);
Added: php/php-src/trunk/ext/date/tests/bug54340.phpt
===================================================================
--- php/php-src/trunk/ext/date/tests/bug54340.phpt (rev 0)
+++ php/php-src/trunk/ext/date/tests/bug54340.phpt 2011-03-22 08:33:22 UTC (rev 309535)
@@ -0,0 +1,43 @@
+--TEST--
+Bug #54340 (DateTime::add() method bug)
+--INI--
+date.timezone=UTC
+--FILE--
+<?php
+$interval = new DateInterval('P1D');
+
+$dt = new DateTime('first day of January 2011');
+var_dump($dt);
+
+$dt->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"
+}