ID: 43452
Updated by: derick@php.net
Reported By: sean dot thorne at gmail dot com
-Status: Assigned
+Status: Closed
Bug Type: Date/time related
Operating System: Mac OS X 10.4.11
PHP Version: 5.2CVS-2007-11-29 (CVS)
Assigned To: derick
New Comment:
This bug has been fixed in CVS.
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:
------------------------------------------------------------------------
[2008-07-17 10:32:00] derick@php.net
Yeah, and I've done some work on that -- but it's not ready yet.
------------------------------------------------------------------------
[2008-07-17 10:29:15] m dot ford at leedsmet dot ac dot uk
Then there's a doc problem, because currently http://php.net/strtotime
describes its first argument as "The string to parse, according to the
GNU » Date Input Formats syntax", with a link to the GNU documentation.
If strtotime() does not, in fact, implement the entirety of what's
described there, exactly as described, then what's actually implemented
should be incorporated into the PHP manual and that link removed.
------------------------------------------------------------------------
[2008-07-15 17:23:37] derick@php.net
Assigning this to myself, but be aware that we do not necessarily
implement this GNU date stuff -- we've never done this either. I'll
check it though.
------------------------------------------------------------------------
[2008-07-15 17:19:38] m dot ford at leedsmet dot ac dot uk
Derick, please take another look at this.
I've examined it in some depth, and tend to agree there's a bug here.
However, if you read the GNU Date Input Formats syntax, linked from
http://php.net/manual/function.strtotime.php,
very closely, you find it
says:
"a day of the week will forward the date (only if necessary) to reach
that day of the week in the future"
... and ...
"a number may precede a day of the week item to move forward
supplementary weeks."
The crucial word here is "supplementary". Taken together, these
specifications suggest that, somewhat counter-intuitively:
Monday month year
should represent the first Monday of the month, no matter what date it
falls on, and
1 Monday month year
should be the Monday *after* that (i.e. the 2nd Monday!!), and so on.
Other wording in the GNU Date "Day of week items" section would tend to
confirm this interpretation.
I therefore submit that the bug actually manifests when the first
occurrence of the requested weekday falls on any date *other* than the
first of the month! :(
However you interpret it, it's nonetheless clear that the relationship
of "1 weekday" to "weekday" should be fixed -- either according to the
GNU specification to occur 1 week later, or more intuitively to mean the
same thing. It's definitely NOT right that "1 Monday" (for example)
means something different from "Monday" *only* when "Monday" is the 1st
of the month...!!
------------------------------------------------------------------------
[2008-06-17 17:21:57] soapergem at gmail dot com
I also confirmed this. This is pretty serious, too! There are an
infinite number of examples in which you can reproduce it; here are a
few:
// expect 06-15-2008, get 06-22-2008
$date = strtotime('3 Sunday June 2008');
echo date('m-d-Y', $date);
// expect 07-08-2008, get 07-15-2008
$date = strtotime('2 Tuesday July 2008');
echo date('m-d-Y', $date);
// expect 08-22-2008, get 08-29-2008
$date = strtotime('4 Friday August 2008');
echo date('m-d-Y', $date);
// expect 09-29-2008, get 10-06-2008
$date = strtotime('5 Monday September 2008');
echo date('m-d-Y', $date);
// expect 10-01-2008, get 10-08-2008
$date = strtotime('1 Wednesday October 2008');
echo date('m-d-Y', $date);
Developers please take note: THIS IS A SERIOUS BUG! (and it's been
around for a long time)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/43452
--
Edit this bug report at http://bugs.php.net/?id=43452&edit=1