Edit report at http://bugs.php.net/bug.php?id=54048&edit=1

 ID:                 54048
 Updated by:         der...@php.net
 Reported by:        sheller0 at gmail dot com
 Summary:            unexpected strtotime() behavior with unix timestamps
-Status:             Open
+Status:             Bogus
 Type:               Bug
 Package:            Date/time related
 Operating System:   Ubuntu 11.04
 PHP Version:        5.3.5
 Block user comment: N
 Private report:     N

 New Comment:

Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions.  Due to the volume
of reports we can not explain in detail here why your report is not
a bug.  The support channels will be able to provide an explanation
for you.

Thank you for your interest in PHP.




Previous Comments:
------------------------------------------------------------------------
[2011-03-02 16:36:59] tomas dot brastavicius at quantum dot lt

If you want to pass a timestamp to strtotime() function you must prepend
the timestamp with '@' character. See
http://www.php.net/manual/en/datetime.formats.compound.php

Since you do not prepend '@' character, strtotime() assumes that you are
passing other than timestamp formatted string. For example, digits
"1009584000" is interpreted as 10 hour 9 minutes 58 seconds, 4000 year.
Some function calls fails because no format matches given digits.

If you want to test a string against timestamp, you may use preg_match()
function.

------------------------------------------------------------------------
[2011-02-18 20:30:02] sheller0 at gmail dot com

Description:
------------
I'm working on a payment processor which unfortunately has to take
several types of date input, as a result I need to test if a date I'm
being passed is already a unix timestamp. For the most part strtotime()
will return false when passed a timestamp. There are a few edge cases
where it will return another timestamp sometime after year 2400 or
before 2000. If this is actually the expected behavior it might be
worthwhile to throw a warning in the documentation about passing
strtotime() unix timestamps

Test script:
---------------
$errors = 0;

$end_date = strtotime('January 1st 2020');

$start_date = strtotime('January 1st 2001');

$bad_years = array();

while ($start_date < $end_date){

        if (strtotime($start_date) !== false){

                echo date ('Y-m-d', $start_date) . ' generates ' .
strtotime($start_date) .  '  ' . date('Y-m-d', strtotime($start_date)) .
"\n";

                $bad_years[] = date('Y', strtotime($start_date));

                $errors++;

        }

        $start_date += 86400;

}

print_r(array_unique($bad_years));

echo "$errors errors generated\n";

Expected result:
----------------
sam.heller@sam:/var/www/development/api/app/scripts$ php test.php 

Array

(

)

0 errors generated

sam.heller@sam:/var/www/development/api/app/scripts$ 



Actual result:
--------------
sam.heller@sam:/var/www/development/api/app/scripts$ php test.php 

2001-09-14 generates 51442009244  3600-02-18

2001-09-15 generates -62163017947  0000-02-18

2001-09-25 generates 64064790099  4000-02-18

2001-09-26 generates -49540237092  0400-02-18

...

...

...

2019-05-22 generates -24294654070  1200-02-18

2019-05-23 generates 177669838738  7600-02-18

2019-06-02 generates -11671873215  1600-02-18

2019-06-03 generates 190292619593  8000-02-18

Array

(

    [0] => 3600

    [1] => 0000

    [2] => 4000

    [3] => 0400

    [4] => 6800

    [5] => 0800

    [6] => 7200

    [8] => 1200

    [9] => 7600

    [11] => 8000

    [12] => 4400

    [14] => 8400

    [15] => 4800

    [17] => 5200

    [18] => 1600

    [20] => 2000

    [22] => 2400

    [23] => 8800

    [25] => 9200

    [26] => 5600

    [28] => 9600

    [29] => 6000

    [31] => 6400

    [32] => 2800

    [34] => 3200

)

1007 errors generated

sam.heller@sam:/var/www/development/api/app/scripts$


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



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

Reply via email to