首页 > 解决方案 > 如何从字符串中分离时区和日期时间?

问题描述

我有一个从文本文件名中获取的字符串。

$string = "20181011000000GMT+0800"

// trying to convert it 
Carbon::createFromFormat('YmdHisTO', $string)->format...

它向我显示了这个错误。

发现意外数据。在数据库中找不到时区数据丢失

如果日期时间字符串以 GMT+0800 结尾,我如何分隔日期时间和时区?

标签: phplaraveldatetime

解决方案


您可以通过对正在使用的格式字符串稍作更改来解析该格式:

$string = "20181011000000GMT+0800";
Carbon::createFromFormat('YmdHisT+', $string);

+标志告诉解析器忽略第一个时区标识符 ( GMT ) 之后的所有内容。严格来说,没有它也可以工作+,但为了清楚起见,我更喜欢使用它。不过取决于你。

https://3v4l.org/kDorn

实际上,对此进行更多测试,我不确定加号是否相关。我认为任何一个时区格式字符(TO)都只是在吞噬所有时区信息,而不仅仅是它们的特定部分。DateTime 的解析器有时可能有点雷区。


推荐阅读