Ask a Question related to PHP Bugs, Design and Development.
-
php at colin dot guthr dot ie #1
#39560 [NEW]: Inconsistent behaviour of strtotime when days > days in month
From: php at colin dot guthr dot ie
Operating system: Linux
PHP version: 5.2.0
PHP Bug Type: Date/time related
Bug description: Inconsistent behaviour of strtotime when days > days in month
Description:
------------
If you give a date to strtotime that is beyond the end of a given month it
sometimes calculates the date correctly (IMO) as the first day of the next
month, but this does not happen in months with 31 days.
e.g. strtotime('2006-11-31') will correctly create a date of 2006-12-01,
but strtotime('2006-11-32') will not create a date of 2007-01-01 as
expected. This is the case for all months that have 30 days (and I presume
february too). Putting in 31 as the number will overflow to the next month,
but putting in 32 in any month will not overflow to the 1st or 2nd day of
the next month as appropriate (usual exceptions for February apply!)
See example code below for examples.
Reproduce code:
---------------
<table><tr><th>Date</th><th>Expected Result</th><th>Actual
Result</th><th>Pass/Fail?</th></tr><?php
$arr_dates = array('2006-11-30 + 1 day' => '2006-12-01',
'2006-11-30 + 2 days' => '2006-12-02',
'2006-12-31 + 1 day' => '2007-01-01',
'2006-06-31' => '2006-07-01',
'2006-07-32' => '2006-08-01',
'2006-11-31' => '2006-12-01',
'2006-11-32' => '2006-12-02',
'2006-12-32' => '2007-01-01');
foreach ($arr_dates as $source => $expected)
{
$result = date('Y-m-d', strtotime($source));
echo '<tr class="'.($result == $expected ? 'pass' : 'fail').'">';
echo '<td>'.$source.'</td>';
echo '<td>'.$expected.'</td>';
echo '<td>'.$result.'</td>';
echo '<td>'.($result == $expected ? 'Pass' : 'Fail').'</td>';
echo '</tr>';
}
?>
</table>
Expected result:
----------------
Results are contained above if you run it.
Actual result:
--------------
Actual results are contained above if you run it.
--
Edit bug report at [url]http://bugs.php.net/?id=39560&edit=1[/url]
--
Try a CVS snapshot (PHP 4.4): [url]http://bugs.php.net/fix.php?id=39560&r=trysnapshot44[/url]
Try a CVS snapshot (PHP 5.2): [url]http://bugs.php.net/fix.php?id=39560&r=trysnapshot52[/url]
Try a CVS snapshot (PHP 6.0): [url]http://bugs.php.net/fix.php?id=39560&r=trysnapshot60[/url]
Fixed in CVS: [url]http://bugs.php.net/fix.php?id=39560&r=fixedcvs[/url]
Fixed in release: [url]http://bugs.php.net/fix.php?id=39560&r=alreadyfixed[/url]
Need backtrace: [url]http://bugs.php.net/fix.php?id=39560&r=needtrace[/url]
Need Reproduce Script: [url]http://bugs.php.net/fix.php?id=39560&r=needscript[/url]
Try newer version: [url]http://bugs.php.net/fix.php?id=39560&r=oldversion[/url]
Not developer issue: [url]http://bugs.php.net/fix.php?id=39560&r=support[/url]
Expected behavior: [url]http://bugs.php.net/fix.php?id=39560&r=notwrong[/url]
Not enough info: [url]http://bugs.php.net/fix.php?id=39560&r=notenoughinfo[/url]
Submitted twice: [url]http://bugs.php.net/fix.php?id=39560&r=submittedtwice[/url]
register_globals: [url]http://bugs.php.net/fix.php?id=39560&r=globals[/url]
PHP 3 support discontinued: [url]http://bugs.php.net/fix.php?id=39560&r=php3[/url]
Daylight Savings: [url]http://bugs.php.net/fix.php?id=39560&r=dst[/url]
IIS Stability: [url]http://bugs.php.net/fix.php?id=39560&r=isapi[/url]
Install GNU Sed: [url]http://bugs.php.net/fix.php?id=39560&r=gnused[/url]
Floating point limitations: [url]http://bugs.php.net/fix.php?id=39560&r=float[/url]
No Zend Extensions: [url]http://bugs.php.net/fix.php?id=39560&r=nozend[/url]
MySQL Configuration Error: [url]http://bugs.php.net/fix.php?id=39560&r=mysqlcfg[/url]
php at colin dot guthr dot ie Guest
-
Lsass 100% cpu every 5-7 days
I have a problem that has been plaguing me for the longest time. We have windows 2000 server, SP4. On it is loaded SQL Server 7, SP4 and a... -
"days=30-2.if(month==2)" a helpfull method, may be
Hi! Ruby is great. My English is not good enough to describe it. (I'm a Newbee, of course.) I guess a (may be) helpfull method for the class... -
#25937 [NEW]: strtotime weirdness with days of week
From: six at t0x dot net Operating system: Linux 2.4 PHP version: 4.3.4RC2 PHP Bug Type: Date/time related Bug description: ... -
Display month and days with results
On 15 Aug 2003 14:28:56 -0700, sf@mnetsys.com (Steve Fitzgerald) wrote: i.e. Only print the month header when the month changes. $cur_month... -
99 days...
By my crude calculations, it is now 99 days until the third annual international Ruby Conference in Austin, Texas, November 14-16, 2003. I urge... -
derick@php.net #2
#39560 [Opn->Bgs]: Inconsistent behaviour of strtotime when days > days in month
ID: 39560
Updated by: [email]derick@php.net[/email]
Reported By: php at colin dot guthr dot ie
-Status: Open
+Status: Bogus
Bug Type: Date/time related
Operating System: Linux
PHP Version: 5.2.0
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
[url]http://www.php.net/manual/[/url] and the instructions on how to report
a bug at [url]http://bugs.php.net/how-to-report.php[/url]
The parser rejects day numbers that can never exist (such as the 32rd).
However, in case you use a day number that is legal (01-31) it is used
correctly and the month will "overflow".
Previous Comments:
------------------------------------------------------------------------
[2006-11-20 17:03:48] php at colin dot guthr dot ie
Description:
------------
If you give a date to strtotime that is beyond the end of a given month
it sometimes calculates the date correctly (IMO) as the first day of the
next month, but this does not happen in months with 31 days.
e.g. strtotime('2006-11-31') will correctly create a date of
2006-12-01, but strtotime('2006-11-32') will not create a date of
2007-01-01 as expected. This is the case for all months that have 30
days (and I presume february too). Putting in 31 as the number will
overflow to the next month, but putting in 32 in any month will not
overflow to the 1st or 2nd day of the next month as appropriate (usual
exceptions for February apply!)
See example code below for examples.
Reproduce code:
---------------
<table><tr><th>Date</th><th>Expected Result</th><th>Actual
Result</th><th>Pass/Fail?</th></tr><?php
$arr_dates = array('2006-11-30 + 1 day' => '2006-12-01',
'2006-11-30 + 2 days' => '2006-12-02',
'2006-12-31 + 1 day' => '2007-01-01',
'2006-06-31' => '2006-07-01',
'2006-07-32' => '2006-08-01',
'2006-11-31' => '2006-12-01',
'2006-11-32' => '2006-12-02',
'2006-12-32' => '2007-01-01');
foreach ($arr_dates as $source => $expected)
{
$result = date('Y-m-d', strtotime($source));
echo '<tr class="'.($result == $expected ? 'pass' : 'fail').'">';
echo '<td>'.$source.'</td>';
echo '<td>'.$expected.'</td>';
echo '<td>'.$result.'</td>';
echo '<td>'.($result == $expected ? 'Pass' : 'Fail').'</td>';
echo '</tr>';
}
?>
</table>
Expected result:
----------------
Results are contained above if you run it.
Actual result:
--------------
Actual results are contained above if you run it.
------------------------------------------------------------------------
--
Edit this bug report at [url]http://bugs.php.net/?id=39560&edit=1[/url]
derick@php.net Guest



Reply With Quote

