ID: 43452 Comment by: m dot ford at leedsmet dot ac dot uk Reported By: sean dot thorne at gmail dot com Status: Assigned 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:
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. Previous Comments: ------------------------------------------------------------------------ [2008-07-15 17:23:37] [EMAIL PROTECTED] 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) ------------------------------------------------------------------------ [2008-04-02 14:06:23] billyt at claritytech dot com We also wrote our own function that handles it. Although, it's purely by random chance that we discovered the problem. It's not something we would specifically have tested for. I wonder how many other people are using it in production with no idea that it's a problem. ------------------------------------------------------------------------ [2008-03-30 22:39:34] sean dot thorne at gmail dot com I ended up writing a compensator for the problem, because it appears that the PHP Dev crew has better things to do then clean up the code base... I kept it simple and grabbed what day was the the first of the month and then found where Thursday would be in comparison and knew the third thursday was just 3 times whatever the date of the first thursday. ------------------------------------------------------------------------ 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