ID: 20382 Updated by: [EMAIL PROTECTED] Reported By: nickj-phpbugs at nickj dot org Status: Feedback Bug Type: Date/time related Operating System: * PHP Version: 4CVS, 5CVS New Comment:
I'm pretty sure the script is buggy. Please give us a test case for ONE date that is wrong, and comment your code properly too. Previous Comments: ------------------------------------------------------------------------ [2004-04-08 04:25:55] [EMAIL PROTECTED] Can you please give a simpler test? (I somehow have a feeling your script is buggy, not PHP) ------------------------------------------------------------------------ [2004-04-08 01:39:23] nickj-phpbugs at nickj dot org It appears that this problem has not been resolved. I've downloaded the latest Stable Win32 package snapshot from http://snaps.php.net/ , in particular this one: http://snaps.php.net/win32/php4-win32-STABLE-200404080430.zip [I.e. from roughly 5 after this bug was closed] Then I've run the test script on it from an above comment. This produces the following results: ========================================================== I:\new downloads\just downloaded\php4-win32-STABLE-200404080430>php bug-20382-test.php Content-type: text/html X-Powered-By: PHP/4.3.6RC3-dev Discrepancy for 2002-3-26 - results were 2002-3-31 vs 2002-4-1 Discrepancy for 2002-3-27 - results were 2002-3-31 vs 2002-4-1 Discrepancy for 2002-3-28 - results were 2002-3-31 vs 2002-4-1 Discrepancy for 2002-3-29 - results were 2002-3-31 vs 2002-4-1 Discrepancy for 2002-3-30 - results were 2002-3-31 vs 2002-4-1 Discrepancy for 2002-3-31 - results were 2002-3-31 vs 2002-4-1 Discrepancy for 2003-3-25 - results were 2003-3-30 vs 2003-3-31 Discrepancy for 2003-3-26 - results were 2003-3-30 vs 2003-3-31 Discrepancy for 2003-3-27 - results were 2003-3-30 vs 2003-3-31 Discrepancy for 2003-3-28 - results were 2003-3-30 vs 2003-3-31 Discrepancy for 2003-3-29 - results were 2003-3-30 vs 2003-3-31 Discrepancy for 2003-3-30 - results were 2003-3-30 vs 2003-3-31 Discrepancy for 2004-3-23 - results were 2004-3-28 vs 2004-3-29 Discrepancy for 2004-3-24 - results were 2004-3-28 vs 2004-3-29 Discrepancy for 2004-3-25 - results were 2004-3-28 vs 2004-3-29 Discrepancy for 2004-3-26 - results were 2004-3-28 vs 2004-3-29 Discrepancy for 2004-3-27 - results were 2004-3-28 vs 2004-3-29 Discrepancy for 2004-3-28 - results were 2004-3-28 vs 2004-3-29 Discrepancy for 2005-3-22 - results were 2005-3-27 vs 2005-3-28 Discrepancy for 2005-3-23 - results were 2005-3-27 vs 2005-3-28 Discrepancy for 2005-3-24 - results were 2005-3-27 vs 2005-3-28 Discrepancy for 2005-3-25 - results were 2005-3-27 vs 2005-3-28 Discrepancy for 2005-3-26 - results were 2005-3-27 vs 2005-3-28 Discrepancy for 2005-3-27 - results were 2005-3-27 vs 2005-3-28 Discrepancy for 2006-3-21 - results were 2006-3-26 vs 2006-3-27 Discrepancy for 2006-3-22 - results were 2006-3-26 vs 2006-3-27 Discrepancy for 2006-3-23 - results were 2006-3-26 vs 2006-3-27 Discrepancy for 2006-3-24 - results were 2006-3-26 vs 2006-3-27 Discrepancy for 2006-3-25 - results were 2006-3-26 vs 2006-3-27 Discrepancy for 2006-3-26 - results were 2006-3-26 vs 2006-3-27 Discrepancy for 2007-3-20 - results were 2007-3-25 vs 2007-3-26 Discrepancy for 2007-3-21 - results were 2007-3-25 vs 2007-3-26 Discrepancy for 2007-3-22 - results were 2007-3-25 vs 2007-3-26 Discrepancy for 2007-3-23 - results were 2007-3-25 vs 2007-3-26 Discrepancy for 2007-3-24 - results were 2007-3-25 vs 2007-3-26 Discrepancy for 2007-3-25 - results were 2007-3-25 vs 2007-3-26 PHP version: 4.3.6RC3-dev<br> ========================================================== What I would expect to happen is that there would not be any discrepancies. The fact there are discrepancies indicates to me that this problem is still unresolved. I understand that there have been two date-related problems solved recently (#27719 and #27780), but whatever updates were made for those problems do not appear to have fixed this problem. ------------------------------------------------------------------------ [2004-04-03 09:10:33] [EMAIL PROTECTED] 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. ------------------------------------------------------------------------ [2003-04-06 18:47:03] scottmacvicar at ntlworld dot com This is a DST problem by the looks of it. The specific dates mentioned are when DST takes effect which is the last sunday in March. ------------------------------------------------------------------------ [2002-11-12 19:46:28] nickj-phpbugs at nickj dot org OK, I decided that was needed was some kind of automated testing, so I wrote it: ============================================ #!/root/php4-200211122230 -q <?php // report any errors at all error_reporting (E_ALL); // pass a date, supply a strtotime modifier, and get a date back function getDateWithModifier($date, $modifier) { list ($year, $month, $day) = explode ("-",$date); $starting_timestamp = mktime (1,1,1,$month,$day,$year); $timestamp_with_modifier = strtotime ($modifier, $starting_timestamp); return date("Y-n-j", $timestamp_with_modifier); } /* ** @desc: for the specified date, will find the date for the desired day of the ** week that is also in the same week. Does NOT use 'strtotime' */ function getDayOfTheWeekFromDate($date, $desired_day_of_week) { // weekdays - note special case for sundays (7, not 0), so as to treat as end of week, not start $weekdays = array ("Sunday" => 7, "Monday" => 1, "Tuesday" => 2, "Wednesday" => 3, "Thursday" => 4, "Friday" => 5, "Saturday" => 6); // convert into a number $desired_day_of_week_number = $weekdays[$desired_day_of_week]; // see what day we have currently list ($year, $month, $day) = explode ("-",$date); $date_day_of_week = date("w", mktime (17,17,17,$month,$day,$year)); $new_day = $day+(($desired_day_of_week_number-$date_day_of_week)+7) % 7; return date("Y-n-j", mktime (17,17,17,$month,$new_day,$year)); } // run an automated test to compare the output of these two functions, and complain if they differ for ($i=1; $i<1000; $i++) { $date = date("Y-n-j", mktime (17,17,17,1,$i,1999)); $strtotime_date = getDateWithModifier($date, "Monday"); $other_date = getDayOfTheWeekFromDate($date, "Monday"); if ($strtotime_date != $other_date) { print "Discrepancy for $date - results were $strtotime_date vs $other_date\n"; } } print "PHP version: " . phpversion(). "<br>\n"; ?> ============================================ Here's the output that I get: ============================================ [EMAIL PROTECTED] tmp]# ./automated-date-test.php Discrepancy for 1999-3-23 - results were 1999-3-28 vs 1999-3-29 Discrepancy for 1999-3-24 - results were 1999-3-28 vs 1999-3-29 Discrepancy for 1999-3-25 - results were 1999-3-28 vs 1999-3-29 Discrepancy for 1999-3-26 - results were 1999-3-28 vs 1999-3-29 Discrepancy for 1999-3-27 - results were 1999-3-28 vs 1999-3-29 Discrepancy for 1999-3-28 - results were 1999-3-28 vs 1999-3-29 Discrepancy for 2000-3-21 - results were 2000-3-26 vs 2000-3-27 Discrepancy for 2000-3-22 - results were 2000-3-26 vs 2000-3-27 Discrepancy for 2000-3-23 - results were 2000-3-26 vs 2000-3-27 Discrepancy for 2000-3-24 - results were 2000-3-26 vs 2000-3-27 Discrepancy for 2000-3-25 - results were 2000-3-26 vs 2000-3-27 Discrepancy for 2000-3-26 - results were 2000-3-26 vs 2000-3-27 Discrepancy for 2001-3-20 - results were 2001-3-25 vs 2001-3-26 Discrepancy for 2001-3-21 - results were 2001-3-25 vs 2001-3-26 Discrepancy for 2001-3-22 - results were 2001-3-25 vs 2001-3-26 Discrepancy for 2001-3-23 - results were 2001-3-25 vs 2001-3-26 Discrepancy for 2001-3-24 - results were 2001-3-25 vs 2001-3-26 Discrepancy for 2001-3-25 - results were 2001-3-25 vs 2001-3-26 PHP version: 4.3.0-dev<br> [EMAIL PROTECTED] tmp]# ============================================ In other words, the result for these 6 days of the year consistently appears to be wrong. (I suppose I should be glad that the very first date I choose to test this function with just by fluke happened to be one of those 6 days, as opposed to causing mysterious problems later!) Does anyone else get any results that appear incorrect on running this script? ------------------------------------------------------------------------ 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/20382 -- Edit this bug report at http://bugs.php.net/?id=20382&edit=1