]> granicus.if.org Git - php/commitdiff
Test + support for negative timestamps with microtime
authorWillem-Jan <wjzijderveld@gmail.com>
Mon, 30 Nov 2015 16:35:12 +0000 (17:35 +0100)
committerDerick Rethans <github@derickrethans.nl>
Fri, 29 Jan 2016 14:22:22 +0000 (15:22 +0100)
ext/date/php_date.c
ext/date/tests/bug68078_negative.phpt [new file with mode: 0644]

index 45e77c38a2e3b9cc89b9ab072171b5970e73a844..4ef954717d8399a2dff0ea62284e1c750e3bc3ea 100644 (file)
@@ -2201,7 +2201,11 @@ static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC)
                        return 0;
                }
 
-               return (o1->time->f < o2->time->f) ? -1 : 1;
+               if (o1->time->sse < 0) {
+                       return (o1->time->f < o2->time->f) ? 1 : -1;
+               } else {
+                       return (o1->time->f < o2->time->f) ? -1 : 1;
+               }
        }
 
        return (o1->time->sse < o2->time->sse) ? -1 : 1;
diff --git a/ext/date/tests/bug68078_negative.phpt b/ext/date/tests/bug68078_negative.phpt
new file mode 100644 (file)
index 0000000..93b7715
--- /dev/null
@@ -0,0 +1,19 @@
+--TEST--
+Comparing datetime objects with negative timestamps should account for microseconds
+--FILE--
+<?php
+
+date_default_timezone_set('UTC');
+$earlyDate1 = DateTime::createFromFormat('U.u', '1.8642')->modify('-5 seconds');
+$earlyDate2 = DateTime::createFromFormat('U.u', '1.2768')->modify('-5 seconds');
+$earlyDate3 = DateTime::createFromFormat('U.u', '1.2768')->modify('-5 seconds');
+
+var_dump($earlyDate1 == $earlyDate2);
+var_dump($earlyDate1 < $earlyDate2);
+var_dump($earlyDate2 > $earlyDate1);
+var_dump($earlyDate2 == $earlyDate3);
+--EXPECT--
+bool(false)
+bool(true)
+bool(true)
+bool(true)