如何从字符串中分离时区和日期时间?

时间:2018-09-10 10:18:28

标签: php laravel datetime

我有一个来自文本文件名的字符串。

$string = "20181011000000GMT+0800"

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

它告诉我这个错误。

  

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

如果datetime字符串的格林尼治标准时间+0800结尾,如何分隔日期时间和时区?

2 个答案:

答案 0 :(得分:3)

您可以通过稍微更改所使用的格式字符串来解析该格式:

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

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

请参见https://3v4l.org/kDorn

实际上,要对此进行更多测试,我不确定加号是否与此相关。我认为任何时区格式字符(TO)都只是吞没了所有时区信息,而不仅仅是它们的特定部分。 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();