php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #52454 Relative dates and getTimestamp increments by one day
Submitted: 2010-07-27 11:46 UTC Modified: 2010-08-30 18:26 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: ben dot davies at stickyeyes dot com Assigned: derick (profile)
Status: Closed Package: Date/time related
PHP Version: 5.3.3 OS: Windows 7 Professional
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: ben dot davies at stickyeyes dot com
New email:
PHP Version: OS:

 

 [2010-07-27 11:46 UTC] 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)


Patches

52454_date_get_timestamp.patch (last revision 2010-08-20 10:03 UTC by mike at iammike dot co dot uk)

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-07-27 11:59 UTC] derick@php.net
-Status: Open +Status: Assigned -Assigned To: +Assigned To: derick
 [2010-08-20 11:43 UTC] 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-08-20 12:05 UTC] 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-30 18:25 UTC] 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-30 18:26 UTC] derick@php.net
-Status: Assigned +Status: Closed
 [2010-08-30 18:26 UTC] derick@php.net
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.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 11:01:29 2024 UTC