Doc #66104 [Opn->Ver]: strtotime reports "2011-02-31" and "2011-11-31" as valid dates
| From: | requinix@php.net | Date: | Wed, 14 Feb 2018 05:45:56 +0000 |
| Subject: | Doc #66104 [Opn->Ver]: strtotime reports "2011-02-31" and "2011-11-31" as valid dates | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-15433@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=66104&edit=1
ID: 66104
Updated by: requinix@php.net
Reported by: papaulsh at gmail dot com
Summary: strtotime reports "2011-02-31" and "2011-11-31" as
valid dates
-Status: Open
+Status: Verified
Type: Documentation Problem
Package: Date/time related
Operating System: WAMP
PHP Version: master-Git-2013-11-15 (Git)
Block user comment: N
Private report: N
New Comment:
I am rather tired of explaining this every other month. How about a note (warning?) that says
something along the lines of how strtotime does not validate the input but instead tries to
interpret it as a date in the most reasonable way possible. Month overflow is the most common issue
by far; 2011-02-31 is not a valid date but the "most reasonable" interpretation of it is 3
days after 2011-02-28 which would be 2011-03-03. And other GNU/OSS date parsers act similarly. The
other common issue is passing a timestamp and expecting to get that same value back (should have
been "@timestamp") but strtotime reads it as some compound format without delimiters, like
HHMMSSYYYY.
Previous Comments:
------------------------------------------------------------------------
[2018-02-13 17:33:57] cmb@php.net
This looks more like a documentation problem. Actually,
strtotime() is very liberal in what it takes.
2011-02-31 is
simply treated as 2011-03-03. Use checkdate() to check whether
a given date is valid.
------------------------------------------------------------------------
[2015-09-30 14:54:12] boliveirasilva at gmail dot com
The same problem occurs for the following dates. (year doesn't matter)
'02/31/2014', '2016/02/31',
'02/30/2015', '2014/02/30',
'02/29/2015', '2015/02/29',
'31-02-2015', '2015-02-31',
'30-02-2015', '2015-02-30',
'29-02-2015', '2015-02-29',
'11/31/2014', '2016/11/31',
'31-11-2015', '2015-11-31'
------------------------------------------------------------------------
[2013-11-15 23:32:08] papaulsh at gmail dot com
Description:
------------
---
From manual page: http://www.php.net/function.strtotime#refsect1-function.strtotime-description
---
My summary info should be sufficient to define the problem, if further clarification is needed
please contact me.
Test script:
---------------
if (!strtotime("2011-02-31")) {
echo "<br />Invalid date";
}
Expected result:
----------------
Invalid date
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=66104&edit=1