繁体   English   中英

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

[英]DateTime->format(epoch) returning the wrong date

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

我有以下纪元时间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

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

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

您也可以在手册中看到这一点。 从那里引用:

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

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

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

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

请尝试以下代码:

$reportedTimeString = date("dmY H:i:s", $supportDetails["Reported"]);

或者以下内容:

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

我看到的问题是你的格式。

如果你看一下PHP的日期函数,你会发现你只需要将所需日期和时间的每个部分写成一个字符串。

以下格式提供了您要查找的相同输出:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM