我有一个来自文本文件名的字符串。
$string = "20181011000000GMT+0800"
// trying to convert it
Carbon::createFromFormat('YmdHisTO', $string)->format...
它告诉我这个错误。
发现意外数据。在数据库中找不到时区 数据丢失
如果datetime字符串的格林尼治标准时间+0800结尾,如何分隔日期时间和时区?
答案 0 :(得分:3)
您可以通过稍微更改所使用的格式字符串来解析该格式:
$string = "20181011000000GMT+0800";
Carbon::createFromFormat('YmdHisT+', $string);
+
符号告诉解析器忽略第一个时区标识符( GMT )之后的所有内容。严格来说,它也可以在没有+
的情况下工作,但是为了清晰起见,我更喜欢使用它。不过取决于你。
实际上,要对此进行更多测试,我不确定加号是否与此相关。我认为任何时区格式字符(T
和O
)都只是吞没了所有时区信息,而不仅仅是它们的特定部分。 DateTime的解析器有时可能有点雷区。
答案 1 :(得分:2)
我建议使用 strtotime(),它接受每种有效的日期时间格式。查看用法:http://nl1.php.net/manual/en/function.strtotime.php
$DateTimeString = "20181011000000GMT+0800";
$timestamp = strtotime($DateTimeString);
// trying to convert it
Carbon::createFromTimestamp($timestamp)->toDateTimeString();