关于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网站应用程序带来致命的影响(比如到时候系统要如何即时获取登录或者下单时间)。
想请教一下论坛的高手,我的这个测试过程大概是在哪里出了问题?
非常感谢!
推荐文章: