【问题标题】:PHP-how does strtotime() work?PHP-strtotime() 是如何工作的?
【发布时间】:2013-08-24 07:09:42
【问题描述】:

我正在开发一个应用程序,该应用程序向第 3 方产品许可服务器发送请求,等待响应,然后在几秒钟后向我的服务器发送请求。后来,我根据它们的创建日期和时间比较了这两条记录。当我查看时间时,它们似乎相隔大约 6 小时(可能是由于时区差异)。但是,当我通过 PHP 的 strtotime() 函数运行每个函数时,结果仅相差几秒钟。这是一个例子:

echo strtotime("2013-04-29T14:55:47.707Z");
echo '<br>';
echo strtotime("2013-04-29 08:56:10");

显示为:

1367247347
1367247370

这只是相差 23 秒,而不是 6 小时。

如果我没有提供有关每个日期字符串的时区的任何信息,它们怎么会如此接近?

(请记住,我希望这些结果是正确的;我只是不确定我是如何得到它们的)

【问题讨论】:

  • 来自strtotime() 的数字是Unix timestamps。第一个时间字符串位于UTC 时区(用Z 表示“Zulu”)。第二个时间字符串没有指定时区,因此使用当前为您的 PHP 配置的,与 UTC 有 -6 小时的偏移量。
  • 我能想到的唯一一件事是.707Z 必须转换为某种类型的时区信息。
  • 您的默认时区设置为 UTC,因此它们在同一时区内进行计算。如果您想要不同的行为,请参阅here

标签: php date time timestamp


【解决方案1】:

除非万不得已,否则您真的应该避免使用strtotime。当您实际上拥有完整的日期格式时,就像您一样,您应该使用 PHP 内置的 DateTime 类。

此代码应为您提供正确的 UNIX 时间戳。 (根据您的服务器配置,您可能不需要包含默认时区。如果您这样做,请将其设置为您的时区。)

// You may be able to comment this out depending on your server configuration
date_default_timezone_set('America/New_York'); 

$dateone = new DateTime('2013-04-29T14:55:47.707Z');
$datetwo = new DateTime('2013-04-29 08:56:10');

echo $dateone->format('U');
echo "<br/>";
echo $datetwo->format('U');

输出:

1367247347
1367240170

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    相关资源
    最近更新 更多