ID:               50682
 User updated by:  keefeg at gmail dot com
 Reported By:      keefeg at gmail dot com
 Status:           Bogus
 Bug Type:         Date/time related
 Operating System: FreeBSD 6.2
 PHP Version:      5.2.12
 New Comment:

I understand your explanation, but the results still seem incorrect. 
Under reasonable circumstances even programmers shouldn't have to
consider "last month" to be equal to "this month."

In the context of "last month", it should first decrement the month,
and then if that particular day (31st of November) does not exist, it
should then decrement the day until it reaches a valid day (30th of
November).

The way it is now breaks programs in a non-obvious way.  I use that
code to daily make a list of archive files to "keep" (now, -1 month, -2
month, -3 month) and on the 31st of December it ended up deleting the
november file because it thought "-1 month" was December.

I'll work around using the 1st of the month, but it at least merits a
warning in the documentation.

Thanks for PHP, it's incredibly useful!


Previous Comments:
------------------------------------------------------------------------

[2010-01-06 20:53:58] ras...@php.net

That's because you are asking for the same day last month which doesn't

exist since November doesn't have 31 days.  November 31 gets normalized

to Dec 1.  If you are using last/next make sure you feed it a recurring

starting point.  Like the 1st of the sequence, in this case the 1st of

the month.

------------------------------------------------------------------------

[2010-01-06 20:28:57] keefeg at gmail dot com

Description:
------------
strtotime does not handle the "last month" parameter correctly all the
time.

Reproduce code:
---------------
---
>From manual page: function.strtotime#Description
---
$ny = strtotime("31 December 2009");
echo "this month: " . date('Ym', strtotime("now", $ny)) . "\n";
echo "last month: " . date('Ym', strtotime("last month", $ny)) . "\n";


Expected result:
----------------
I would like it to produce this result:

this month: 200912
last month: 200911


Actual result:
--------------
It prints this result:

this month: 200912
last month: 200912



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=50682&edit=1

Reply via email to