关于2038年之后用DateTime类获取当前时间的测试
网上搜索有关在 PHP 环境下解决 2038 年 UNIX 时间戳溢出问题的方法,绝大多数方案就是以下 2 种:
1、运行环境全面使用 x64 版本,包括操作系统、web server、数据库和 php 等
2、使用 php5.2.0 之后提供的 DateTime 类
近日闲来无事在自己的电脑上测试了一下(Windows11、Apache2.4.43、PHP8.3,均为 64 位,且 MSVC++ 2015-2022 Redistributable X64 已安装),首先是断网并将系统时钟调整为 2040 年,然后尝试 php 的几个获取 “当前” 时间的函数 / 方法,如 time (),getDate () 之类,以及 DateTime::getTimestamp () 等,均返回负值(即 32 位有符号整型溢出)。
当然,对于手动输入的 2038 年之后的日期时间(时间戳数值以及日期时间字符串),其它转换、计算的函数 / 方法都是正确的(比如 strtotime、date 之类),也就是说 64 位的运行环境的确可以处理 32 位 UNIX 时间戳溢出的大部分问题,但是唯独 “获取当前时间” 这个功能似乎仍然无法正确实现,而这也将对大多数 PHP 网站应用程序带来致命的影响(比如到时候系统要如何即时获取登录或者下单时间)。
想请教一下论坛的高手,我的这个测试过程大概是在哪里出了问题?
非常感谢!
推荐文章: