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");
-62170005200
php > echo strtotime('1000-01-30');
-30607739600
php > echo strtotime('2100-01-30');
4104930600
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 :

bool(false)
bool(false)
bool(false)

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))
{
//error
}

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