ID: 20382
Updated by: derick@php.net
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] sniper@php.net
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] derick@php.net
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:
============================================
[root@www 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>
[root@www 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