Bug #71865 [Nab]: strtotime treat as valid date

From: Date: Tue, 22 Mar 2016 11:31:22 +0000
Subject: Bug #71865 [Nab]: strtotime treat as valid date
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-200028@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=71865&edit=1

 ID:                 71865
 Updated by:         derick@php.net
 Reported by:        finull at vip dot qq dot com
 Summary:            strtotime treat as valid date
 Status:             Not a bug
 Type:               Bug
 Package:            Date/time related
 Operating System:   MacOS X 10.11
 PHP Version:        5.6.19
 Block user comment: N
 Private report:     N

 New Comment:

As a hint, if you get weird results, use date_parse, and it will tell you how it (tried to) parse
the string:

derick@whisky:~ $ php -r 'var_dump(date_parse("1458363078"));'
Command line code:1:
array(12) {
  'year' =>
  int(1458)
  'month' =>
  int(1)
  'day' =>
  int(363)
  'hour' =>
  bool(false)
  'minute' =>
  bool(false)
  'second' =>
  bool(false)
  'fraction' =>
  bool(false)
  'warning_count' =>
  int(1)
  'warnings' =>
  array(1) {
    [11] =>
    string(27) "The parsed date was invalid"
  }
  'error_count' =>
  int(3)
  'errors' =>
  array(3) {
    [7] =>
    string(20) "Unexpected character"
    [8] =>
    string(20) "Unexpected character"
    [9] =>
    string(20) "Unexpected character"
  }
  'is_localtime' =>
  bool(false)
}


Previous Comments:
------------------------------------------------------------------------
[2016-03-22 03:45:08] finull at vip dot qq dot com

got it.

Thanks a lot!

------------------------------------------------------------------------
[2016-03-22 03:38:46] requinix@php.net

https://3v4l.org/TM23M

1458363078 is parsed as 1458=year, 363=day, then invalid characters (PostgreSQL compound format)
1458373078 is parsed as 14=hour, 58=minute, 37=second, year=3078 (time and date formats)

Don't pass Unix timestamps to strtotime.

------------------------------------------------------------------------
[2016-03-22 03:23:44] finull at vip dot qq dot com

I also got this output

strtotime(1458363078) returns FALSE
strtotime(1458373078) returns 34972066717

Why?

------------------------------------------------------------------------
[2016-03-21 07:26:12] requinix@php.net

You've discovered the HHMMSSYYYY format.

------------------------------------------------------------------------
[2016-03-21 07:13:17] finull at vip dot qq dot com

Description:
------------
Found this bug when I use strtotime to checkout if input was valid date. 

strtotime(1458533078) should return FALSE, but it does't;


Test script:
---------------
$timestamp = strtotime(1458533078);
// output: 34971980333
echo $timestamp;




Expected result:
----------------
FALSE

Actual result:
--------------
34971980333


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=71865&edit=1


Thread (6 messages)

« previous php.bugs (#200028) next »