php时间函数最大只能到2038-01-19的问题

使用strtotime(2038-01-20)输出结果报错,查询得知:

Y2K38 漏洞
       Y2K38,又称 Unix Millennium Bug,此漏洞将会影响到所有 32 位系统下用 UNIX 时间戳整数来记录时间的 PHP,及其它编程语言。
一个整型的变量所能保存的最大时间为 2038 年01月19 日 03:14:07。超过这个时间后,整型数值将会溢出。
从 1970 年 01 月 01 日开始,到世界标准时 2038 年 01 月 19 日星期二凌晨 03:14:07 超过 2^31 – 1。2^31 – 1 就是0x7FFFFFFF,相信很多编程员都看过,在 32 位系统里,这表示最大的有符号整数。如果用它来表示秒数,大概相当于 68.1 年,从 1970 年到 2038 年刚好是这个数。

 解决办法:
PHP下Unix时间戳与日期互转(解决1970年前及2038年后问题)
//这个问题主要在32位的系统下出现,64位的不存在这样的问题。
//php 5.2+提供了DateTime类来处理这样的问题,参考方案如下(请注意时区的处理):
 
//1、Unix时间戳转日期
function unixtime_to_date($unixtime, $timezone = 'PRC') {
    $datetime = new DateTime("@$unixtime"); //DateTime类的bug,加入@可以将Unix时间戳作为参数传入
    $datetime->setTimezone(new DateTimeZone($timezone));
    return $datetime->format("Y-m-d H:i:s");
}
 
//2、日期转Unix时间戳
function date_to_unixtime($date, $timezone = 'PRC') {
    $datetime= new DateTime($date, new DateTimeZone($timezone));
    return $datetime->format('U');
}
 
echo date_to_unixtime("1546419209"); //输出2019-01-02 16:53:29
echo '<br>';
echo unixtime_to_date(date_to_unixtime("2999-1-2 16:53:29")); //输出32472262409


下面是DateTime更多的用法:https://www.jb51.net/article/90279.htm
————————————————
原文链接:https://blog.csdn.net/m0_37865510/article/details/85249351

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值