DateTime->格式(epoch)返回错误的日期

时间:2015-04-08 17:07:51

标签: php datetime

我正在处理一个项目,我遇到了将时间段格式化为人类可读时间的问题。

我有以下纪元时间1428512160,当我通过epochconverter.com时,我按预期获得08/04/2015 17:56:00 GMT+1:00 DST的人工时间。

然后,我使用以下代码执行从纪元时间到人类日期时间的转换。

$dt = new DateTime($supportDetails["Reported"]);
$reportedTimeString = $dt->format('d-m-Y H:i:s');

$ supportDetails [报告]是纪元时间(我打印出来,所以我知道它是正确的)。

然而,我得到的结果是08-04-2160 14:28:51

4 个答案:

答案 0 :(得分:8)

您需要在DateTime类中为时间戳添加@,如下所示:

$dt = new DateTime("@" . $supportDetails["Reported"]);
                  //^ See here

您还可以在manual中看到这一点。从那里引用:

  

Unix时间戳 " @" " - "? [0-9] +" @ 1215282385"

另请注意,当前时区会被忽略,您也可以在manual中看到:

  

注意:   当 $ time 参数为 UNIX时间戳时, $ timezone参数和当前时区会被忽略(例如 @ 946684800 )或指定时区(例如2010-01-28T15:00:00 + 02:00)。

答案 1 :(得分:0)

打印日期和时间是正确的。 它基于您在PHP中设置的GMT。 如果您使用GMT打印,您将获得所需的结果。

答案 2 :(得分:0)

请尝试以下代码:

$reportedTimeString = date("d-m-Y H:i:s", $supportDetails["Reported"]);

或以下内容:

$date = new DateTime();
$date->setTimestamp($supportDetails["Reported"]);
$reportedTimeString = $date->format("d-m-Y H:i:s");

答案 3 :(得分:0)

我看到的问题在于您的格式。

如果你看PHP's date function,你可以看到你只需要写出所需日期的每一部分。时间变成一个字符串。

以下格式提供了您正在寻找的相同输出:

$dt = new DateTime($supportDetails["Reported"]); $reportedTimeString = $dt->format('d/m/Y H:i:s \G\M\TP T');