php - 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);
解决方案
您收到此错误是因为提供的日期与指定的格式不匹配。
在 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);
我希望这有帮助。您必须将日期与时区分开并如上所述进行处理。
推荐阅读
- android - 将 Delete Method API 与具有多个参数的改造 2 android 集成
- javascript - Javascript - 对象构造和利用 - 深入了解
- heroku - heroku:如何获取 ssl https 的辅助名称服务器
- ios - 如何使用通知和观察者从另一个 UIViewController 隐藏 UILabel
- elasticsearch - 带有 NEST 的 Elasticsearch BulkAll:超出最大容量
- jquery - 为什么 jQuery 自动完成输入与 runat 中断?
- javascript - 操作数组中的对象
- linux - 如何在 Linux 中将文件移动到 cron.d?
- c++ - 条件内的指针语法
- .net - 反序列化对象的对象