]> granicus.if.org Git - php/commitdiff
Fixed day_of_week function as it could sometimes return negative values internally.
authorDerick Rethans <github@derickrethans.nl>
Mon, 8 Dec 2014 11:06:12 +0000 (11:06 +0000)
committerDerick Rethans <github@derickrethans.nl>
Mon, 8 Dec 2014 11:06:12 +0000 (11:06 +0000)
ext/date/lib/dow.c
ext/date/tests/DateTime_setISODate_variation1.phpt
ext/date/tests/bug49585.phpt
ext/date/tests/date_isodate_set_variation2.phpt
ext/date/tests/getdate_variation7.phpt
ext/date/tests/localtime_variation3.phpt

index a77fdd7182219aa27175929e384826d5a1563ac8..ccfea996f9221748dac96507730e65146eb8b7ea 100644 (file)
 static int m_table_common[13] = { -1, 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; /* 1 = jan */
 static int m_table_leap[13] =   { -1, 6, 2, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; /* 1 = jan */
 
+static timelib_sll positive_mod(timelib_sll x, timelib_sll y)
+{
+       timelib_sll tmp;
+
+       tmp = x % y;
+       if (tmp < 0) {
+               tmp += y;
+       }
+
+       return tmp;
+}
+
 static timelib_sll century_value(timelib_sll j)
 {
-       return 6 - (j % 4) * 2;
+       return 6 - positive_mod(j, 4) * 2;
 }
 
 static timelib_sll timelib_day_of_week_ex(timelib_sll y, timelib_sll m, timelib_sll d, int iso)
@@ -36,9 +48,9 @@ static timelib_sll timelib_day_of_week_ex(timelib_sll y, timelib_sll m, timelib_
         * Julian calendar. We just return the 'wrong' day of week to be
         * consistent. */
        c1 = century_value(y / 100);
-       y1 = (y % 100);
+       y1 = positive_mod(y, 100);
        m1 = timelib_is_leap(y) ? m_table_leap[m] : m_table_common[m];
-       dow = (c1 + y1 + m1 + (y1 / 4) + d) % 7;
+       dow = positive_mod((c1 + y1 + m1 + (y1 / 4) + d), 7);
        if (iso) {
                if (dow == 0) {
                        dow = 7;
index d685f27ed0dd16883063b099e01aaab0e7377ec2..a4e8865e73b7cc0a0bd100a4e63562ec9adadbdf 100644 (file)
@@ -145,7 +145,7 @@ object(DateTime)#%d (3) {
 -- int -12345 --
 object(DateTime)#%d (3) {
   ["date"]=>
-  string(28) "-12345-02-15 08:34:10.000000"
+  string(28) "-12345-02-11 08:34:10.000000"
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
@@ -165,7 +165,7 @@ object(DateTime)#%d (3) {
 -- float -10.5 --
 object(DateTime)#%d (3) {
   ["date"]=>
-  string(27) "-0010-02-19 08:34:10.000000"
+  string(27) "-0010-02-14 08:34:10.000000"
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
index 2ec14245ead5267d242974ac01f4d1f056fb7c16..d21bba6c5ce0b448f5770ddb2a0beab45defd709 100644 (file)
@@ -10,7 +10,8 @@ var_dump($date->format('r'));
 $date->setDate(-2147483648, 1, 1);
 var_dump($date->format('r'));
 var_dump($date->format('c'));
+?>
 --EXPECT--
-string(32) "Sat, 01 Jan -1500 00:00:00 +0000"
-string(42) "Unknown, 01 Jan -2147483648 00:00:00 +0000"
+string(32) "Fri, 01 Jan -1500 00:00:00 +0000"
+string(38) "Mon, 01 Jan -2147483648 00:00:00 +0000"
 string(32) "-2147483648-01-01T00:00:00+00:00"
index 5b59a696c6b16231e7050138c77493f337142579..3c3b6924bbddefa8336072e731fea66639f9bafd 100644 (file)
@@ -145,7 +145,7 @@ object(DateTime)#%d (3) {
 -- int -12345 --
 object(DateTime)#%d (3) {
   ["date"]=>
-  string(28) "-12345-02-15 08:34:10.000000"
+  string(28) "-12345-02-11 08:34:10.000000"
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
@@ -165,7 +165,7 @@ object(DateTime)#%d (3) {
 -- float -10.5 --
 object(DateTime)#%d (3) {
   ["date"]=>
-  string(27) "-0010-02-19 08:34:10.000000"
+  string(27) "-0010-02-14 08:34:10.000000"
   ["timezone_type"]=>
   int(3)
   ["timezone"]=>
index 5af2dd53fc632134ce849228d5ce6cc3cc14d872..2088fa1792eeba2a4e4c4d3c82da5d2dc6a3a0d0 100644 (file)
@@ -61,7 +61,7 @@ array\(11\) {
   \["mday"\]=>
   int\((9|14|23)\)
   \["wday"\]=>
-  int\((6|-4)\)
+  int\(0\)
   \["mon"\]=>
   int\((10|12)\)
   \["year"\]=>
@@ -69,7 +69,7 @@ array\(11\) {
   \["yday"\]=>
   int\((282|347|295)\)
   \["weekday"\]=>
-  string\((8|7)\) "(Saturday|Unknown)"
+  string\(6\) "Sunday"
   \["month"\]=>
   string\((7|8)\) "(October|December)"
   \[0\]=>
index d941e3891e678119807afff543fcd9c83920312f..34d8f57f01df15dbcd455fdc74d8da37e60952e6 100644 (file)
@@ -87,7 +87,7 @@ array\(9\) {
   \[5\]=>
   int\((104|1|-3843)\)
   \[6\]=>
-  int\((5|-5)\)
+  int\(6\)
   \[7\]=>
   int\((281|346|294)\)
   \[8\]=>
@@ -107,7 +107,7 @@ array\(9\) {
   \["tm_year"\]=>
   int\((104|1|-3843)\)
   \["tm_wday"\]=>
-  int\((5|-5)\)
+  int\(6\)
   \["tm_yday"\]=>
   int\((281|346|294)\)
   \["tm_isdst"\]=>