什么会导致php的strtotime不适用于2099年的约会?

Jas*_*son 5 php

我有三台服务器,在所有三台服务器上执行以下操作:

echo strtotime('2099-12-31');
echo strtotime(date('Y-m-d'));
Run Code Online (Sandbox Code Playgroud)

得到我:

服务器#1:(php 5.3.8,64bit)

4102376400
1328418000
Run Code Online (Sandbox Code Playgroud)

服务器2:(php 5.3.2,32bit)

**[nothing]**
1328418000
Run Code Online (Sandbox Code Playgroud)

服务器#3 :( php 5.3.2 - 64bit我认为它可能是一个php版本问题)

4102376400
1328418000
Run Code Online (Sandbox Code Playgroud)

什么会导致strtotime在其中一台服务器上失败而在其他服务器上失败?这三个在php.ini中都有相同的默认时区和date.timezone设置(不确定是否会产生影响).我也打开了错误,我没有看到任何东西.

Tim*_*lla 9

可能是一个32位的问题.它在我的64位服务器上工作正常,但我的32位Ubuntu返回falsestrtotime('2099-12-31')

有关详细信息,请参阅手册中的此注释(由我突出显示):

时间戳的有效范围通常是从星期五,1901年12月13日20:45:54 UTC到星期二,2038年1月19日03:14:07 UTC.(这些是与32位有符号整数的最小值和最大值相对应的日期.)此外,并非所有平台都支持负时间戳,因此您的日期范围可能不会早于Unix时期.这意味着例如1970年1月1日之前的日期将无法在Windows,某些Linux发行版和一些其他操作系统上运行.PHP 5.1.0和更新的版本克服了这个限制.

对于64位版本的PHP,时间戳的有效范围实际上是无限的,因为64位可以代表任何方向上大约2930亿年.

  • PHP手册非常愚蠢.在2930亿和无穷大之间存在**大**差异. (5认同)
  • 这就是"有效"进入的地方. (3认同)