Skip to content

Commit 369c041

Browse files
committed
Fixed bug #77243 (Weekdays are calculated incorrectly for negative years)
1 parent 52eb52d commit 369c041

File tree

5 files changed

+41
-5
lines changed

5 files changed

+41
-5
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ PHP NEWS
44

55
- Date:
66
. Fixed bug #74671 (DST timezone abbreviation has incorrect offset). (Derick)
7+
. Fixed bug #77243 (Weekdays are calculated incorrectly for negative years).
8+
(Derick)
79
. Fixed bug #78139 (timezone_open accepts invalid timezone string argument).
810
(Derick)
911

ext/date/lib/dow.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ static timelib_sll timelib_day_of_week_ex(timelib_sll y, timelib_sll m, timelib_
5252
/* Only valid for Gregorian calendar, commented out as we don't handle
5353
* Julian calendar. We just return the 'wrong' day of week to be
5454
* consistent. */
55-
c1 = century_value(y / 100);
55+
c1 = century_value((y / 100) - (y<0));
5656
y1 = positive_mod(y, 100);
5757
m1 = timelib_is_leap(y) ? m_table_leap[m] : m_table_common[m];
5858
dow = positive_mod((c1 + y1 + m1 + (y1 / 4) + d), 7);

ext/date/tests/bug49585.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ var_dump($date->format('r'));
1212
var_dump($date->format('c'));
1313
?>
1414
--EXPECT--
15-
string(32) "Fri, 01 Jan -1500 00:00:00 +0000"
16-
string(38) "Mon, 01 Jan -2147483648 00:00:00 +0000"
15+
string(32) "Sun, 01 Jan -1500 00:00:00 +0000"
16+
string(38) "Tue, 01 Jan -2147483648 00:00:00 +0000"
1717
string(32) "-2147483648-01-01T00:00:00+00:00"

ext/date/tests/bug75851.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ echo date(DATE_ATOM."\n".DATE_RFC2822."\nc\nr\no\ny\nY\nU\n\n", PHP_INT_MAX);
1313
?>
1414
--EXPECT--
1515
-292277022657-01-27T08:29:52+00:00
16-
Fri, 27 Jan -292277022657 08:29:52 +0000
16+
Sun, 27 Jan -292277022657 08:29:52 +0000
1717
-292277022657-01-27T08:29:52+00:00
18-
Fri, 27 Jan -292277022657 08:29:52 +0000
18+
Sun, 27 Jan -292277022657 08:29:52 +0000
1919
-292277022657
2020
-57
2121
-292277022657

ext/date/tests/bug77243.phpt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
--TEST--
2+
Bug #77243 (Weekdays are calculated incorrectly for negative years)
3+
--FILE--
4+
<?php
5+
date_default_timezone_set('UTC');
6+
7+
$time=-62167046400; // 0000-01-03 0-01-1
8+
9+
for ($i = -10; $i < 10; $i++ )
10+
{
11+
echo date('Y-m-d o-W-N', $time + ($i * 86400)), "\n";
12+
}
13+
?>
14+
--EXPECT--
15+
-0001-12-24 -1-51-5
16+
-0001-12-25 -1-51-6
17+
-0001-12-26 -1-51-7
18+
-0001-12-27 -1-52-1
19+
-0001-12-28 -1-52-2
20+
-0001-12-29 -1-52-3
21+
-0001-12-30 -1-52-4
22+
-0001-12-31 -1-52-5
23+
0000-01-01 -1-52-6
24+
0000-01-02 -1-52-7
25+
0000-01-03 0-01-1
26+
0000-01-04 0-01-2
27+
0000-01-05 0-01-3
28+
0000-01-06 0-01-4
29+
0000-01-07 0-01-5
30+
0000-01-08 0-01-6
31+
0000-01-09 0-01-7
32+
0000-01-10 0-02-1
33+
0000-01-11 0-02-2
34+
0000-01-12 0-02-3

0 commit comments

Comments
 (0)