我正在处理一个项目,我遇到了将时间段格式化为人类可读时间的问题。
我有以下纪元时间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
。
答案 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');