php strtotime只传年,PHP的strtotime()函数2038年bug问题

最近在开发一个订单查询模块的时候,想当然的写了个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年之后该怎么办?》

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值