Laravel MongoDB中Carbon格式化日期显示异常问题求助
问题分析与解决方案
你遇到的问题核心是错误使用了Carbon的@时间戳解析符号,导致日期解析完全偏离预期。
为什么会出错?
MongoDB中存储的ISODate("2018-03-31T01:08:50.000+0000")是标准的ISO日期格式,而你代码里的@符号是Carbon专门用来解析**Unix时间戳(数字格式的秒数)**的标记。当你把@和ISO日期字符串拼接后,Carbon会把整个字符串当作数字来解析,自然会得到完全错误的日期结果(比如你看到的16-10-50214)。
正确的解决方法
Laravel配合MongoDB驱动(比如常用的jenssegers/laravel-mongodb)时,会自动将MongoDB的ISODate字段转换为Carbon实例,所以你不需要额外调用parse方法,直接格式化即可:
<td>{{ $item->time->format('d-m-Y H-i-s-e') }}</td>
如果因为某些原因$item->time不是Carbon实例(比如驱动配置问题),也只需要直接解析ISO日期字符串,去掉@符号:
<td>{{ Carbon\Carbon::parse($item->time)->format('d-m-Y H-i-s-e') }}</td>
验证结果
用你的示例ISODate测试,正确解析后会得到31-03-2018 01-08-50-+00:00,和MongoDB存储的日期完全匹配。
内容的提问来源于stack exchange,提问作者Ammar Ali
相关产品推荐
相关产品推荐

