PHP strtotime in 64 bit environment

The strtotime function is used to convert a date in various formats to a timestamp. However its behaviour is different based on architecture it is running on, whether 32bit or 64bit.

Lets take a few examples :

In 64 bit environment

desktop:~$ php -a
Interactive shell

php > echo strtotime("0000-00-00 00:00:00");
php > echo strtotime('1000-01-30');
php > echo strtotime('2100-01-30');
php > 

Over here we can see that strtotime is producing timestamps for far dates like 30-01-2100 and 30-01-1000 and even 00-00-0000

whereas on a 32 bit machine it would do this :

echo var_dump(strtotime("0000-00-00 00:00:00"));

echo var_dump(strtotime('1000-01-30'));

echo var_dump(strtotime('2100-01-30'));

Output :


So strtotime is not able to handle far away dates on a 32bit machine.

This can have effects in your code. For example if you are checking a date to be valid based on whether strtotime returns false or not :

if(! strtotime($date))

Then the above approach would fail when the machine is 64 bit, because strtotime would simply succeed. On 64 bit , the date range for strtotime is quite large compared to that on 32 bit. Therefore an indepth checking of date range is necessary on the more powerful 64bit architecture.

Last Updated On : 23rd October 2011

Subscribe to get updates delivered to your inbox

Leave a comment