首页 > 解决方案 > PHP:从日期格式 YYYY-MM-DD HH:MM:SS GMT+HH:MM 获取时间戳

问题描述

我正在从 *.txt 文件中读取行并以这种样式获取字符串(日期格式):

2017-10-19 20:51:54 GMT+08:00
2020-03-31 13:19:31 GMT-08:00
2018-04-10 14:35:17 GMT

使用函数DateTime::createFromFormat,我想将这些行转换为时间字符串。之后,我想用getTimestamp();获取时间戳。. 所以,目前我的代码看起来像这样($date 是我的阅读行):

$date = DateTime::createFromFormat("Y-m-d H:i:s", $date);
$timeStamp = $date->getTimestamp();

当我尝试这样做时,我收到以下错误消息:

Fatal error: Uncaught Error: Call to a member function getTimestamp() on bool in ...

有谁知道如何解决这个问题?


编辑:
关于 Gordon 的评论,我也尝试添加缺失的部分(“GMT”=> e 和“+08:00”=> P),如下所示:
$date= DateTime::createFromFormat("Y-m-d H:i:s eP", $date);

标签: phptimestampdate-format

解决方案


您收到此错误是因为提供的日期与指定的格式不匹配。

在 createFromFormat() 调用之后添加以下行 -

var_dump(DateTime::getLastErrors());

上面的行将返回错误。错误消息是 - “尾随数据”。这是因为字符串中有“GMT+08:00”。

为了正确处理它,您应该向 createFormFormat 提供可选的第三个参数,它是时区,它希望它是一个 DateTimeZone 对象。因此,将您的 createFromFormat 函数更新为 -

$timezone = new DateTimeZone('GMT+08:00');
$date = "2017-10-19 20:51:54";
$date = DateTime::createFromFormat("Y-m-d H:i:s", $date, $timezone);

我希望这有帮助。您必须将日期与时区分开并如上所述进行处理。


推荐阅读