Bug #52454 [Asn->Csd]: Relative dates and getTimestamp increments by one day
| From: | derick@php.net | Date: | Mon, 30 Aug 2010 16:26:10 +0000 |
| Subject: | Bug #52454 [Asn->Csd]: Relative dates and getTimestamp increments by one day | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-153936@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=52454&edit=1
ID: 52454
Updated by: derick@php.net
Reported by: ben dot davies at stickyeyes dot com
Summary: Relative dates and getTimestamp increments by one
day
-Status: Assigned
+Status: Closed
Type: Bug
Package: Date/time related
Operating System: Windows 7 Professional
PHP Version: 5.3.3
Assigned To: derick
Block user comment: N
New Comment:
This bug has been fixed in SVN.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2010-08-30 18:25:54] derick@php.net
Automatic comment from SVN on behalf of derick
Revision: http://svn.php.net/viewvc/?view=revision&revision=302890
Log: - Fixed bug #52454 (Relative dates and getTimestamp increments by
one day)
------------------------------------------------------------------------
[2010-08-20 12:05:18] mike at iammike dot co dot uk
Removing the call to timelib_ts_update in date_get_timestamp as per
52454_date_get_timestamp.patch fixes it.
I'm not sure if it's the right thing to do but I can't think of a good
reason
you'd need to update anything when retrieving a timestamp.
------------------------------------------------------------------------
[2010-08-20 11:43:03] mike at iammike dot co dot uk
I believe I've encountered the same bug although with slightly different
effects.
Code to reproduce
-----------------
date_default_timezone_set("Europe/London");
$s = new DateTime;
$e = new DateTime("+3 months");
$i = new DateInterval("P1M");
$p = new DatePeriod($s, $i, $e);
foreach($p as $m) {
$m->getTimestamp();
$m->getTimestamp();
echo $m->format("Y-m-d") . "\n";
}
Expected results
----------------
2010-08-20
2010-09-20
2010-10-20
Actual results
--------------
2010-08-20
2010-11-20
2010-12-20
I first encountered this in PHP 5.3.2-1ubuntu4.2 but I've verified it's
still
there in PHP 5.3.99-dev (trunk snapshot 201008200830).
Additional calls to getTimestamp cause the month to be incremented
further.
Interestingly, if you swap "+3 months" for "+3 years" and "P1M" for
"P1Y" the
year is affected instead of the month.
------------------------------------------------------------------------
[2010-07-27 11:46:01] ben dot davies at stickyeyes dot com
Description:
------------
If you create a DateTime object using a relative date string of "this
week +6 days", when calling getTimestamp on the datetime object, the
date is mysteriously increments by one day. However, if you seperately
modify the datetime using 'this week', then '+6 days', it works
correctly.
Where is the additional day comeing from, and why is it only applied
when calling format('U') DOESNT increment the datetime by 1 day. Wierd!
Here is a work around:
$endOfWeek = new DateTime();
$endOfWeek->modify('this week');
$endOfWeek->modify('+6 days');
echo $endOfWeek->format('Y-m-d H:m:s')."\n";
echo $endOfWeek->format('U')."\n";
/* Thar she blows! */
echo $endOfWeek->getTimestamp()."\n";
echo $endOfWeek->format('Y-m-d H:m:s')."\n";
Test script:
---------------
$endOfWeek = new DateTime();
$endOfWeek->modify('this week +6 days');
echo $endOfWeek->format('Y-m-d H:m:s')."\n";
echo $endOfWeek->format('U')."\n";
/* Thar she blows! */
echo $endOfWeek->getTimestamp()."\n";
echo $endOfWeek->format('Y-m-d H:m:s')."\n";
Expected result:
----------------
DateTime should stay the same after a call to getTimestamp (surely
getTimestamp should be safe from side effects)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=52454&edit=1