php strtotime 2099,PHP的strtotime()函数2039年bug问题

最近在开发一个订单查询模块的时候,想当然的写了个2099年的日期,结果PHP返回了空值,肯定是发生溢出错误了,搜索了网上,发现下面这篇文章,但是我的问题依然没有解决,要怎么得到2038年以后的时间戳呢?

我综合了网上的资料,写了以下测试代码,应该可以解决这个问题了:

我的测试环境是:Win7 64位,PHP环境是:PhpStudy PHP5.5n

<?phpecho ‘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年之后该怎么办?》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值