Bug #67706 [Com]: strtotime goes wrong for "last day of February next year"
[email protected] ("php-bugs at allenjb dot me dot uk")
| Newsgroups | php.bugs |
|---|---|
| Message-ID | <[email protected]> |
Edit report at https://bugs.php.net/bug.php?id=67706&edit=1
ID: 67706
Comment by: php-bugs at allenjb dot me dot uk
Reported by: greenrover33 at gmail dot com
Summary: strtotime goes wrong for "last day of February next
year"
Status: Assigned
Type: Bug
Package: Date/time related
Operating System: Linux/Independent
PHP Version: 5.6Git-2014-07-29 (Git)
Assigned To: derick
Block user comment: N
Private report: N
New Comment:
This issue appears to be fixed as of 5.6.8: https://3v4l.org/a1CVu
Previous Comments:
------------------------------------------------------------------------
[2014-07-29 11:54:00] greenrover33 at gmail dot com
Workaround in PHP
$string = 'last day of february next year';
$matches = array();
if (preg_match('/ of (?<month_name>january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)\s*(?<year>(([0-9]{2,4})|((last|this|next|(\-[0-9]+)|(\+[0-9]+)) years?)?))?/i', $string, $matches)) {
if (empty($matches['year'])) {
$string .= ' ' . date('Y');
} elseif (!is_numeric($matches['year'])) {
if ($now > 0) {
$string = str_replace($matches['year'], date('Y', strtotime($matches['year'], $now)), $string);
} else {
$string = str_replace($matches['year'], date('Y', strtotime($matches['year'])), $string);
}
}
}
------------------------------------------------------------------------
[2014-07-29 10:39:57] [email protected]
You're right - this needs looking at.
------------------------------------------------------------------------
[2014-07-29 09:48:17] greenrover33 at gmail dot com
I have seen this Report:
https://bugs.php.net/bug.php?id=50048
But different to them is, that i give a relative year.
Normaly it should translate the date first before it tries to resolve the day.
------------------------------------------------------------------------
[2014-07-29 09:42:40] greenrover33 at gmail dot com
Description:
------------
strtotime goes wrong for "last day of February next year"
"last day of February next year" got the 31.03 the last day of march as result.
Test script:
---------------
$bug_from = 1406625924; // 29.07.2014 11:25
echo strftime('%d.%m.%Y %H:%M:%S', strtotime('last day of February next year', $bug_from));
echo ' != ';
echo strftime('%d.%m.%Y %H:%M:%S', strtotime('last day of February 2015', $bug_from));
die();
Expected result:
----------------
28.02.2015 00:00:00 != 28.02.2015 00:00:00
Actual result:
--------------
31.03.2015 00:00:00 != 28.02.2015 00:00:00
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=67706&edit=1