代码之家  ›  专栏  ›  技术社区  ›  Crazy

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

  •  0
  • Crazy  · 技术社区  · 6 年前

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

    $string = "20181011000000GMT+0800"
    
    // trying to convert it 
    Carbon::createFromFormat('YmdHisTO', $string)->format...
    

    它显示了这个错误。

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

    如果datetime字符串的结尾是gmt+0800,如何将datetime和时区分开?

    2 回复  |  直到 6 年前
        1
  •  3
  •   iainn    6 年前

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

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

    这个 + 符号告诉解析器在第一个时区标识符之后忽略所有内容( 格林尼治时间 )严格地说,如果没有 + 也是,但我更喜欢用它来表达清楚。但这取决于你。

    https://3v4l.org/kDorn

    实际上,再测试一下,我不确定加号是否与此相关。我想是时区格式的字符( T O )只是吞没了所有时区信息,而不仅仅是它们的特定部分。datetime的解析器有时可能有点像雷区。

        2
  •  2
  •   tprj29    6 年前

    我建议使用 SttoTimes() 它接受每个有效的日期时间格式。参见用法: http://nl1.php.net/manual/en/function.strtotime.php

    $DateTimeString = "20181011000000GMT+0800";
    $timestamp = strtotime($DateTimeString);
    // trying to convert it
    Carbon::createFromTimestamp($timestamp)->toDateTimeString();