Skip to content

Commit 991ba13

Browse files
committed
Fix bug #54340 (DateTime::add() method bug).
1 parent 0de2e61 commit 991ba13

File tree

2 files changed

+45
-4
lines changed

2 files changed

+45
-4
lines changed

ext/date/php_date.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2855,14 +2855,13 @@ PHP_FUNCTION(date_add)
28552855
if (intobj->diff->invert) {
28562856
bias = -1;
28572857
}
2858+
memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time));
28582859
dateobj->time->relative.y = intobj->diff->y * bias;
28592860
dateobj->time->relative.m = intobj->diff->m * bias;
28602861
dateobj->time->relative.d = intobj->diff->d * bias;
28612862
dateobj->time->relative.h = intobj->diff->h * bias;
28622863
dateobj->time->relative.i = intobj->diff->i * bias;
28632864
dateobj->time->relative.s = intobj->diff->s * bias;
2864-
dateobj->time->relative.weekday = 0;
2865-
dateobj->time->relative.have_weekday_relative = 0;
28662865
}
28672866
dateobj->time->have_relative = 1;
28682867
dateobj->time->sse_uptodate = 0;
@@ -2902,15 +2901,14 @@ PHP_FUNCTION(date_sub)
29022901
bias = -1;
29032902
}
29042903

2904+
memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time));
29052905
dateobj->time->relative.y = 0 - (intobj->diff->y * bias);
29062906
dateobj->time->relative.m = 0 - (intobj->diff->m * bias);
29072907
dateobj->time->relative.d = 0 - (intobj->diff->d * bias);
29082908
dateobj->time->relative.h = 0 - (intobj->diff->h * bias);
29092909
dateobj->time->relative.i = 0 - (intobj->diff->i * bias);
29102910
dateobj->time->relative.s = 0 - (intobj->diff->s * bias);
29112911
dateobj->time->have_relative = 1;
2912-
dateobj->time->relative.weekday = 0;
2913-
dateobj->time->relative.have_weekday_relative = 0;
29142912
dateobj->time->sse_uptodate = 0;
29152913

29162914
timelib_update_ts(dateobj->time, NULL);

ext/date/tests/bug54340.phpt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
--TEST--
2+
Bug #54340 (DateTime::add() method bug)
3+
--INI--
4+
date.timezone=UTC
5+
--FILE--
6+
<?php
7+
$interval = new DateInterval('P1D');
8+
9+
$dt = new DateTime('first day of January 2011');
10+
var_dump($dt);
11+
12+
$dt->add($interval);
13+
var_dump($dt);
14+
15+
$dt = new DateTime('first day of January 2011');
16+
17+
$dt->sub($interval);
18+
var_dump($dt);
19+
--EXPECT--
20+
object(DateTime)#2 (3) {
21+
["date"]=>
22+
string(19) "2011-01-01 00:00:00"
23+
["timezone_type"]=>
24+
int(3)
25+
["timezone"]=>
26+
string(3) "UTC"
27+
}
28+
object(DateTime)#2 (3) {
29+
["date"]=>
30+
string(19) "2011-01-02 00:00:00"
31+
["timezone_type"]=>
32+
int(3)
33+
["timezone"]=>
34+
string(3) "UTC"
35+
}
36+
object(DateTime)#3 (3) {
37+
["date"]=>
38+
string(19) "2010-12-31 00:00:00"
39+
["timezone_type"]=>
40+
int(3)
41+
["timezone"]=>
42+
string(3) "UTC"
43+
}

0 commit comments

Comments
 (0)