我和我的同事从一些使用 strtotime 的单元测试中获得了不同的结果。
差异源于此行:
$value = strtotime('2050-05-01T20:10:29.410Z');
在我的机器上,此结果返回以下内容:
int(2535048629)
而我同事的版本返回false
我们都使用 PHP 版本 5.4.14 和 PHPUnit 3.724。
有没有人知道是什么导致了这种差异,是否有更强大的方法?
它可能与 32 位和 64 位有关。2050 年的时间戳大于 32 位。
这是因为他使用的是 32 位机器,而您使用的是 64 位机器。查看echo PHP_INT_MAX;
两台机器上的返回值。更多阅读这里。
如果您希望在 32 位机器上获取时间戳,您可以使用 DateTime 作为:
$value = new DateTime('2050-05-01T20:10:29.410Z');
echo $value->format('U'); // returns 2535048629 as string
或将输入的时间戳格式化为:
$value = new DateTime('@2535048629');
echo $value->format('r'); // Sun, 01 May 2050 20:10:29 +0000
而date('r', '2535048629');
不是在 32 位机器上不起作用。