最近在开发一个订单查询模块的时候,想当然的写了个2099年的日期,结果PHP返回了空值,肯定是发生溢出错误了,搜索了网上,发现下面这篇文章,但是我的问题依然没有解决,要怎么得到2038年以后的时间戳呢?
我综合了网上的资料,写了以下测试代码,应该可以解决这个问题了:
我的测试环境是:Win7 64位,PHP环境是:PhpStudy PHP5.5n
echo 'PHP中正整形常量的最大值【PHP_INT_MAX】:'.PHP_INT_MAX.'
';
echo 'PHP_INT_MAX能转换为的最大日期值:'.date("Y-m-d H:i:s", PHP_INT_MAX).'
';
echo '
';
$date1 = '1970-01-01 08:00:00';
echo '1970-01-01 08:00:00 时间戳:->'.strtotime($date1).'
';
//
$date2 = '2038-01-19 11:14:07';
echo '2038-01-19 11:14:07 时间戳:->'.strtotime($date2).'
';
$date2a = '2038-01-19 11:14:08';
$datetime2a = new DateTime($date2a);
echo '2038-01-19 11:14:08 时间戳:->'.$datetime2a->format('U').'
';
//
$date3 = '2099-12-31 00:00:00';
$datetime = new DateTime($date3);
echo '2099-12-31 00:00:00 时间戳:->'.$datetime->format('U').'
';
$date4 = '9999-12-31 23:59:59';
$datetime = new DateTime($date4);
echo '9999-12-31 23:59:59 时间戳:->'.$datetime->format('U').'
';
?>
PS.有关format()函数的参数,参见官方文档:http://www.php.net/manual/en/function.date.php
以上代码运行的结果:
PHP中正整形常量的最大值【PHP_INT_MAX】:2147483647
PHP_INT_MAX能转换为的最大日期值:2038-01-19 11:14:07
1970-01-01 08:00:00 时间戳:->0
2038-01-19 11:14:07 时间戳:->2147483647
2038-01-19 11:14:08 时间戳:->2147483648
2099-12-31 00:00:00 时间戳:->4102329600
9999-12-31 23:59:59 时间戳:->253402271999
由于本机的PHP_INT_MAX就是:2147483647,所以它转换为日期值,最大也就是 2038-01-19 11:14:07 ,超过哪怕一秒,也就产生了溢出。
-------------------------------------------------------------------------------------------------------------------------------------------------
以下是我找到一篇参考文章:《php时间日期处理到2038年之后该怎么办?》