【问题标题】:Carbon parse date formatCarbon 解析日期格式
【发布时间】:2023-01-05 21:00:11
【问题描述】:

我正在尝试解析格式如下的日期:

2017-09-20T10:59:10.0000000 01:00

我正在使用 Carbon,所以我尝试了:

Carbon::createFromFormat('Y-m-dTH:i:s.u vP', $date)

哪个输出:

The timezone could not be found in the database\n
Unexpected data found.\n
Data missing

我猜最后一个时区参数可能是错误的,但我找不到如何解析该日期格式:/

感谢帮助 !

【问题讨论】:

    标签: php laravel date datetime php-carbon


    【解决方案1】:

    您需要为时区添加一个标志,例如:

    +01:00
    

    那么这对你有用:

    Carbon::createFromFormat('Y-m-dTH:i:s.0000000 P', $date)
    

    如果您的字符串可以包含 -01:00 但您得到的不是 +01:00 而不是 01:00,请先执行此操作:

    $timezone = str_after($date, ' ');
    if ($timezone[0] !== '-') {
        $date = str_before($date, ' ') . ' +' . $timezone;
    }
    

    【讨论】:

    • 感谢您的帮助,它有效 ;) 不修改字符串就无法解析日期吗?由第三方服务API返回
    • @LouisRocher 有一种方法,但它更冗长。我会用这个。如果出于某种原因需要它,您可以使用另一个变量来保存原始字符串。
    • 有一个问题......它没有给出错误,但日期是错误的:1970-01-01:/我终于使用 Carbon::createFromFormat('Y-m-dTH:i:s+', $date) 忽略了 2017 年之后的内容-09-20T10:59:10。感谢帮助 !
    • @LouisRocher 这是因为.0000000。通常,API 总是返回零,因此您可以跳过这些。如果您需要替代方案,我已经更新了代码。
    猜你喜欢
    • 2021-11-30
    • 2016-12-01
    • 2023-02-07
    • 2021-11-10
    • 2016-01-29
    • 1970-01-01
    • 2018-04-20
    • 2018-08-06
    相关资源
    最近更新 更多