php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #66104 strtotime reports "2011-02-31" and "2011-11-31" as valid dates
Submitted: 2013-11-15 23:32 UTC Modified: 2019-04-09 13:17 UTC
Votes:2
Avg. Score:4.5 ± 0.5
Reproduced:2 of 2 (100.0%)
Same Version:1 (50.0%)
Same OS:1 (50.0%)
From: papaulsh at gmail dot com Assigned: girgias (profile)
Status: Closed Package: Date/time related
PHP Version: Irrelevant OS:
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: papaulsh at gmail dot com
New email:
PHP Version: OS:

 

 [2013-11-15 23:32 UTC] 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


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2015-09-30 14:54 UTC] 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'
 [2017-04-01 19:47 UTC] tpunt@php.net
-Package: date_time +Package: Date/time related
 [2018-02-13 17:33 UTC] 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.
 [2018-02-13 17:34 UTC] cmb@php.net
-Type: Bug +Type: Documentation Problem
 [2018-02-14 05:45 UTC] requinix@php.net
-Status: Open +Status: Verified
 [2018-02-14 05:45 UTC] requinix@php.net
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.
 [2019-04-09 10:22 UTC] girgias@php.net
-Operating System: WAMP +Operating System: -PHP Version: master-Git-2013-11-15 (Git) +PHP Version: Irrelevant -Assigned To: +Assigned To: girgias
 [2019-04-09 10:22 UTC] girgias@php.net
Assigning to myself to remind me to add a note explaining the behavior of strtotime
 [2019-04-09 13:17 UTC] salathe@php.net
Just FYI, we already have a detailed note and explanation on the Date Formats [1] page about this behaviour.

[1] https://www.php.net/manual/en/datetime.formats.date.php
 [2021-01-28 16:26 UTC] cmb@php.net
Automatic comment on behalf of cmbecker69@gmx.de
Revision: http://git.php.net/?p=doc/en.git;a=commit;h=f3bc618211dd65a97eb427aceb9473d3b4a0c3d0
Log: Fix #66104: strtotime reports &quot;2011-02-31&quot; and &quot;2011-11-31&quot; as valid dates
 [2021-01-28 16:26 UTC] cmb@php.net
-Status: Verified +Status: Closed
 [2021-01-28 17:57 UTC] mumumu@php.net
Automatic comment on behalf of mumumu@mumumu.org
Revision: http://git.php.net/?p=doc/ja.git;a=commit;h=8f913a80f74422b18100800abafe949ce7366649
Log: Fix #66104: strtotime reports &quot;2011-02-31&quot; and &quot;2011-11-31&quot; as valid dates
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 14:01:30 2024 UTC