PHP的strtotime计算2038年以上日期的时间戳错误
来源:互联网 发布:迅捷网络登录密码多少 编辑:程序博客网 时间:2024/05/19 18:48
今天同事遇到一个bug,获取有效期值错误,同样的代码,其他开发人员操作都没有问题。在定位跟踪后发现有效期有值,如下:
$expireDate = 2133999048;但是在该时间戳的基础上加上1 year后, $expireDate的值为false,而不是正确的时间戳。
$expireDate = strtotime("+1 year", $expireDate);于是将时间戳改为天数并不断寻找最终的边界在+156 days可以正常返回,超过后就无法正常返回。于是将时间戳转换成正常格式的时间
echo date("Y-m-d", $expireDate);显示日期为2038-01-19。网上搜索一下,说是32位的unix时间戳漏洞,称为Y2K38 漏洞。64位的系统不受此影响。
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 年刚好是这个数。
0 0
- PHP的strtotime计算2038年以上日期的时间戳错误
- PHP的时间函数strtotime
- PHP使用strtotime获取本月的日期
- PHP的时间加减的函数strtotime
- PHP的时间加减的函数strtotime
- PHP 日期转换为时间戳 strtotime 与 mktime 函数
- PHP 日期转换为时间戳 strtotime 与 mktime 函数
- PHP 日期转换为时间戳 strtotime 与 mktime 函数
- php 使用date及strtotime等日期时间函数的注意
- strtotime('yesterday')与strtotime('-1 day')获取的时间戳
- php中strtotime与mktime的Y2K38漏洞(时间最长为2038年)
- PHP日期时间函数之strtotime()
- php日期时间处理date() strtotime() mktime()
- strtotime支持的有效时间戳
- php strtotime 函数 获取上月日期的异常表现
- PHP获取上个月、下个月、本月的日期(strtotime,date)
- PHP下获取上个月、下个月、本月的日期(strtotime,date)
- 【转】php获取日期及strtotime()的方法
- 算法-第四版-练习1.3.30解答
- 2.java设计模式接口型模式(读书笔记)(讲解接口和抽象类)
- ES6新特性:使用export和import实现模块化
- Android设置过头像后怎么保存啊,求助
- 预估未来必不可少的5个IT技能
- PHP的strtotime计算2038年以上日期的时间戳错误
- DES加解密算法实现
- bootstrap模态框居中
- 文本特征提取方法研究
- Android 开发环境配置
- web开发性能优化---代码优化篇
- MXNet设计和实现简介
- 为什么写的滚动条监听事件无效
- 【Zookeeper学习】(三):Curator与Fluent编程风格下(对建造者模式的理解)