为什么Laravel 8中Carbon::createFromFormat返回无效日期?
错误原因
- 日期格式字符串参数误用:
H:m中的m是月份的格式化标识符,不是分钟标识符,Carbon会把时间部分的56识别为月份值。 - 月份最大有效值为12,56超出范围后Carbon会自动做日期进位计算:56 ÷ 12 = 4年余8个月,原2021年累加为2025年,月份变为8月,同时因为没有正确配置分钟的格式化参数,分钟默认被解析为00,最终得到你看到的错误结果。
- 你原代码中
09/02/2021 05:56外层使用了中文单引号,运行时会触发语法错误,需要替换为英文单引号。
正确实现
分钟对应的格式化标识符为i,将格式字符串中的H:m修改为H:i即可,正确代码如下:
$date = Carbon::createFromFormat('m/d/Y H:i', '09/02/2021 05:56', config('app.timezone'));
执行后得到的日期为预期的2021-09-02 05:56:00。
常用格式化参数参考
日常使用注意区分以下高频格式化参数,避免混淆:
m:带前导零的月份(01-12)i:带前导零的分钟(00-59)s:带前导零的秒(00-59)d:带前导零的日期(01-31)H:24小时制带前导零的小时(00-23)h:12小时制带前导零的小时(01-12)
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

