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

讨论数量: 6

这个问题很好解决啊,换64位环境。要么做兼容,国内的话请换64位 :smirk:

2个月前 评论
huangyz778 (楼主) 2个月前

还有13年到时间,那个时候已经不搞程序了,让后面的人头疼去吧

2个月前 评论
huangyz778 (楼主) 2个月前

换Linux试试 可能跟调用库 或者硬件有关
博客:担心PHP未来时间戳不够用的一次调查

2个月前 评论
huangyz778 (楼主) 2个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!