Bug #50916 [Com]: DateTime::sub repeats each time getTimestamp is called
| From: | yoarvi at gmail dot com | Date: | Wed, 10 Mar 2010 08:00:04 +0000 |
| Subject: | Bug #50916 [Com]: DateTime::sub repeats each time getTimestamp is called | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-148455@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=50916&edit=1
ID: 50916
Comment by: yoarvi at gmail dot com
Reported by: charlesb at itsmystuff dot com
Summary: DateTime::sub repeats each time getTimestamp is called
Status: Open
Type: Bug
Package: Date/time related
Operating System: Windows Server 2003 SP2
PHP Version: 5.3.1
New Comment:
The fix for http://bugs.php.net/bug.php?id=49059
fixes this problem as
well. I think this bug can be closed as a duplicate of 49059.
Previous Comments:
------------------------------------------------------------------------
[2010-03-02 23:00:01] v-ryanbi at microsoft dot com
I've attached a patch that is tested on Windows, although the code that
needs to be changed appears to be universal. The patch also includes a
.phpt that compares the resulting timestamps.
The fix for this is a bit disconcerting for me, but as I'm not entirely
familiar with the codebase, I didn't want to muck things up too much.
Shouldn't the c function do_adjust_relative() in tm2unixtime.c be the
one to clear the flags it uses after it applies changes? If we're
clearing the flags in the calling functions, we're bound to miss more
stuff like this one.
------------------------------------------------------------------------
[2010-02-20 10:28:40] pontus dot alexander at gmail dot com
This bug is confirmed to still be alive in snapshot "5.3-201002200930"
compiled on Debian Linux.
Reproduction code:
$Time = new \DateTime('NOW');
$Month = new \DateInterval('P1Y');
var_dump($Time);
// Correctly subtracted
$Time->sub($Month);
var_dump($Time);
// Wrongly subtracted
$Time->getTimestamp();
var_dump($Time);
------------------------------------------------------------------------
[2010-02-02 18:04:23] charlesb at itsmystuff dot com
Description:
------------
Each time DateTime::getTimestamp is called, a previously called
DateTime::sub value is applied. This does not occur with DateTime::add.
Reproduce code:
---------------
$work_time = new DateTime("2010-01-30 12:00:00");
$work_time->sub(new DateInterval("P7D"));
$window_start = $work_time->getTimestamp();
echo date("Y-m-d H:i:s", $window_start) . "<br />";
$window_start = $work_time->getTimestamp();
echo date("Y-m-d H:i:s", $window_start) . "<br />";
Expected result:
----------------
2010-01-23 12:00:00
2010-01-23 12:00:00
Actual result:
--------------
2010-01-16 12:00:00
2010-01-09 12:00:00
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=50916&edit=1