php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #64347 Date object
Submitted: 2013-03-04 11:14 UTC Modified: 2015-01-20 21:16 UTC
Votes:4
Avg. Score:4.5 ± 0.5
Reproduced:3 of 3 (100.0%)
Same Version:1 (33.3%)
Same OS:0 (0.0%)
From: alessio at alias2k dot com Assigned: derick (profile)
Status: Not a bug Package: *General Issues
PHP Version: Irrelevant OS: Debian 6
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: alessio at alias2k dot com
New email:
PHP Version: OS:

 

 [2013-03-04 11:14 UTC] alessio at alias2k dot com
Description:
------------
---
From manual page: http://www.php.net/datetime.sub#refsect1-datetime.sub-
description
---

When you have a datetime object you can modify the date adding or subtracting 
month. If you do that, the result is always unpredictable, because the mktime, 
the sub, or the modify function, always subtract the amount of days of the 
previous month. I'll make an example:
If I do
<?php
$date = new DateTime('2001-03-31');
$interval = new DateInterval('P1M');

$date->sub($interval);
echo $date->format('Y-m-d');
?>
I obtain 2001-03-03 as result, but I've expected to have 2001-02-28, because the 
previous month is february, not 28 days first.
We have the same problem if we add some months to our starting date:

<?php
$date = new DateTime('2001-03-31');
$interval = new DateInterval('P1M');

$date->add($interval);
echo $date->format('Y-m-d');
?>
I obtain 2001-05-01 as result, but also in this case I've aspected a different 
result, i think the right value is 2001-04-30, because you have to add the days 
of the next month to obtain the right result, not the days of current month.
.
The problem is also the communication with mySql, because mySql calculate the 
right result, so the comparison between two date it's impossible

Test script:
---------------
<?php
$date = new DateTime('2001-03-31');
$interval = new DateInterval('P1M');

$date->sub($interval);
echo $date->format('Y-m-d');
?>

Expected result:
----------------
2001-02-28

Actual result:
--------------
2001-03-03

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2013-12-05 17:21 UTC] mike@php.net
-Assigned To: +Assigned To: derick
 [2015-01-20 21:16 UTC] derick@php.net
-Status: Assigned +Status: Not a bug
 [2015-01-20 21:16 UTC] derick@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

This is expected behaviour. +1 month and -1 month add or remove "1" from the month number. The dates look odd because the day count under or overflows.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Apr 19 16:01:27 2024 UTC