ID:               20382
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Open
+Status:           Feedback
 Bug Type:         Date/time related
 Operating System: Linux Mandrake 7.2
 PHP Version:      4.2.3
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php4-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php4-win32-latest.zip


Your script produces the expected dates for me with latest CVS
snapshot. Please give try it out.



Previous Comments:
------------------------------------------------------------------------

[2002-11-12 02:11:16] [EMAIL PROTECTED]

Strtotime() appears to produce incorrect output under some
circumstances - specifically when wanting the date of a particular day
of the week day of the week from a given starting date. For example,
using 2001-3-20 as a starting point, we want the date for the next
Monday. The correct answer is the 26th, but the result produced is the
25th (a Sunday). The correct result is given sometimes, so this appears
to depend on the input.

A sample script to illustrate:
=======================================================
#!/root/php-4.2.3 -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 (10,10,10,$month,$day,$year);
        $timestamp_with_modifier = strtotime ($modifier,
$starting_timestamp);
        return date("Y-n-j", $timestamp_with_modifier);
}

print "<hr>\n";
print "from 2001-3-17, goto monday: " .
getDateWithModifier("2001-3-17", "Monday") . "; should be
2001-3-19.<br>\n";
print "from 2001-3-18, goto monday: " .
getDateWithModifier("2001-3-18", "Monday") . "; should be
2001-3-19.<br>\n";
print "from 2001-3-19, goto monday: " .
getDateWithModifier("2001-3-19", "Monday") . "; should be
2001-3-19.<br>\n";
print "from 2001-3-20, goto monday: " .
getDateWithModifier("2001-3-20", "Monday") . "; should be 2001-3-26
###.<br>\n";
print "from 2001-3-21, goto monday: " .
getDateWithModifier("2001-3-21", "Monday") . "; should be 2001-3-26
###.<br>\n";
print "from 2001-3-22, goto monday: " .
getDateWithModifier("2001-3-22", "Monday") . "; should be 2001-3-26
###.<br>\n";
print "from 2001-3-23, goto monday: " .
getDateWithModifier("2001-3-23", "Monday") . "; should be 2001-3-26
###.<br>\n";
print "from 2001-3-24, goto monday: " .
getDateWithModifier("2001-3-24", "Monday") . "; should be 2001-3-26
###.<br>\n";
print "from 2001-3-25, goto monday: " .
getDateWithModifier("2001-3-25", "Monday") . "; should be 2001-3-26
###.<br>\n";
print "from 2001-3-26, goto monday: " .
getDateWithModifier("2001-3-26", "Monday") . "; should be
2001-3-26.<br>\n";
print "from 2001-3-27, goto monday: " .
getDateWithModifier("2001-3-27", "Monday") . " ; should be
2001-4-2.<br>\n";
print "<hr>\n";

print "PHP version: " . phpversion(). "<br>\n";

?>
=======================================================

Produces this output:
=======================================================
[root@www tmp]# ./script.php 
<hr>
from 2001-3-17, goto monday: 2001-3-19; should be 2001-3-19.<br>
from 2001-3-18, goto monday: 2001-3-19; should be 2001-3-19.<br>
from 2001-3-19, goto monday: 2001-3-19; should be 2001-3-19.<br>
from 2001-3-20, goto monday: 2001-3-25; should be 2001-3-26 ###.<br>
from 2001-3-21, goto monday: 2001-3-25; should be 2001-3-26 ###.<br>
from 2001-3-22, goto monday: 2001-3-25; should be 2001-3-26 ###.<br>
from 2001-3-23, goto monday: 2001-3-25; should be 2001-3-26 ###.<br>
from 2001-3-24, goto monday: 2001-3-25; should be 2001-3-26 ###.<br>
from 2001-3-25, goto monday: 2001-3-25; should be 2001-3-26 ###.<br>
from 2001-3-26, goto monday: 2001-3-26; should be 2001-3-26.<br>
from 2001-3-27, goto monday: 2001-4-2 ; should be 2001-4-2.<br>
<hr>
PHP version: 4.2.3<br>
[root@www tmp]#
========================================================

Expected output: The 6 lines with "###" are expected to produce the
indicated output, but do not.

Problem was noticed today in PHP 4.06, and then verified as being
reproducible in PHP 4.2.3 (same output).

PHP 4.2.3 configured with:
./configure --with-mysql --enable-xml --enable-wddx 


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=20382&edit=1

Reply via email to