#45550 [Bgs]: BC break: strtotime parses 0000-00-00 00:00:00 as valid date in 5.2.6
| From: | jack+phpdotnet at smartertravelmedia dot com | Date: | Fri, 18 Jul 2008 13:31:11 +0000 |
| Subject: | #45550 [Bgs]: BC break: strtotime parses 0000-00-00 00:00:00 as valid date in 5.2.6 | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-126949@lists.php.net to get a copy of this message | ||
ID: 45550
User updated by: jack+phpdotnet at smartertravelmedia dot com
Reported By: jack+phpdotnet at smartertravelmedia dot com
Status: Bogus
Bug Type: Date/time related
Operating System: RHEL 4/5
PHP Version: 5.2.6
New Comment:
First of all, those previously-reported bugs are with the DateTime
class, not strtotime. If DateTime uses strtotime or its underlying
implementation, that's not for me to know. I searched the bug database
before submitting this report and did not find the two you mentioned.
Your "similar bugs" prompt didn't flag them either.
Second, how is this not a bug? strtotime's manual page says, "Returns
a timestamp on success, FALSE otherwise." The string of zeroes that
mysql uses is NOT a valid datetime string, so how is strtotime
"successfully" parsing it into a random negative number? That's aside
from the fact that this is a behavior *change* from 5.2.5 to 5.2.6 -
that alone makes it a problem.
Third, you can think mysql is silly for using this as a default all you
want, but they've been doing it since at least version 3.23 if not
before. Just because you don't agree with it doesn't mean PHP shouldn't
handle it as advertised - namely to return false if an invalid date/time
string is passed to strtotime.
Previous Comments:
------------------------------------------------------------------------
[2008-07-18 07:25:05] derick@php.net
Please do not submit the same bug more than once. An existing
bug report already describes this very problem. Even if you feel
that your issue is somewhat different, the resolution is likely
to be the same.
Thank you for your interest in PHP.
http://bugs.php.net/bug.php?id=42971
http://bugs.php.net/bug.php?id=44453
This is not a bug. MySQL is being silly to use this string as a default
value. In PHP 5.3 you can now detect this however, by using
date_parse_from_format( "Y-m-d H:i:s"); and then check the contents of
date_get_last_errors().
------------------------------------------------------------------------
[2008-07-18 02:32:45] jack+phpdotnet at smartertravelmedia dot com
updated subject to note that this is a backward-compatibility break.
------------------------------------------------------------------------
[2008-07-17 22:00:04] jack+phpdotnet at smartertravelmedia dot com
Description:
------------
MySQL uses '0000-00-00 00:00:00' as a default value for non-null
datetime fields. Until 5.2.6, strtotime correctly returned false (or -1
before 5.1) when passed this value - it's not a valid date/time.
5.2.6 returns '-62169966000' which is not useful.
Reproduce code:
---------------
<?php echo (int)strtotime('0000-00-00 00:00:00');
Expected result:
----------------
Should print 0.
Actual result:
--------------
Actually prints -62169966000.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=45550&edit=1