]> granicus.if.org Git - php/commitdiff
- Fixed bug #46268 (DateTime::modify() does not reset relative time
authorDerick Rethans <derick@php.net>
Thu, 18 Dec 2008 20:32:44 +0000 (20:32 +0000)
committerDerick Rethans <derick@php.net>
Thu, 18 Dec 2008 20:32:44 +0000 (20:32 +0000)
  values).

ext/date/php_date.c
ext/date/tests/bug46268.phpt [new file with mode: 0644]

index 950289751d29d945a4a3f99040b6bce5ff1de8dd..95f8c926fe957bd61ff59cd4d05d0e2dc21747a5 100644 (file)
@@ -2871,6 +2871,7 @@ PHP_FUNCTION(date_modify)
 
        timelib_update_ts(dateobj->time, NULL);
        timelib_update_from_sse(dateobj->time);
+       dateobj->time->have_relative = 0;
 
        RETURN_ZVAL(object, 1, 0);
 }
@@ -2915,6 +2916,7 @@ PHP_FUNCTION(date_add)
 
        timelib_update_ts(dateobj->time, NULL);
        timelib_update_from_sse(dateobj->time);
+       dateobj->time->have_relative = 0;
 
        RETURN_ZVAL(object, 1, 0);
 }
diff --git a/ext/date/tests/bug46268.phpt b/ext/date/tests/bug46268.phpt
new file mode 100644 (file)
index 0000000..dd2d4a3
--- /dev/null
@@ -0,0 +1,23 @@
+--TEST--
+Bug #46268 (When call DateTime#setTime, it seems to be called the last modify method too)
+--FILE--
+<?php
+date_default_timezone_set('Asia/Tokyo');
+
+$now = new DateTime('2008-10-10 01:02:03');
+echo $now->format("Y-m-d H:i:s") . PHP_EOL;
+
+$now->modify("1 day after");
+echo $now->format("Y-m-d H:i:s") . PHP_EOL;
+
+$now->modify("1 hour after");
+echo $now->format("Y-m-d H:i:s") . PHP_EOL;
+
+$now->setTime(0, 0, 0);
+//date_time_set($now, 0, 0, 0);
+echo $now->format("Y-m-d H:i:s") . PHP_EOL;
+--EXPECT--
+2008-10-10 01:02:03
+2008-10-11 01:02:03
+2008-10-11 02:02:03
+2008-10-11 00:00:00