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

Reply via email to