【问题标题】:PHP strtotime returning false for UTC timePHP strtotime 为 UTC 时间返回 false
【发布时间】:2013-10-23 16:19:11
【问题描述】:

我和我的同事从一些使用 strtotime 的单元测试中获得了不同的结果。

差异源于此行:

$value = strtotime('2050-05-01T20:10:29.410Z');

在我的机器上,这个结果返回如下:

int(2535048629)

而我同事的版本返回 false

我们都使用 PHP 5.4.14 和 PHPUnit 3.724。

有没有人知道是什么导致了这种差异,有没有更可靠的方法?

【问题讨论】:

  • 32 位还是 64 位?可以验证吗?
  • 啊,我是 64 位的。他今年 32 岁……

标签: php utc strtotime


【解决方案1】:

这可能与 32 位和 64 位有关。 2050 年的时间戳大于 32 位。

【讨论】:

  • 最后我将答案授予了 Glavic,因为他的解释为可能遇到相同问题的其他人添加了更多细节。
【解决方案2】:

这是因为他是 32 位的,而你是 64 位的机器。查看echo PHP_INT_MAX; 在两台机器上返回的内容。更多阅读here

如果你想在 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 位机器上不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    相关资源
    最近更新 更多