Laravel中使用Carbon解析指定日期格式时报错如何解决
错误原因
你传入的时间字符串2021-10-12T09:20:27:915 GMT+0600不符合Carbon/DateTime原生自动解析的规则:秒数和毫秒数之间的分隔符错误使用了冒号:,标准时间格式中该位置应为小数点.,因此解析器在扫描到第19位的冒号时抛出异常。
解决方案
提供两种可直接使用的修复方式:
方案1:预处理时间字符串后自动解析
将秒和毫秒之间的冒号替换为小数点,再用parse方法解析:
$originalTime = '2021-10-12T09:20:27:915 GMT+0600'; // 仅替换秒与毫秒之间的冒号,避免误改其他位置的分隔符 $processedTime = preg_replace('/:(\d{3}) GMT/', '.$1 GMT', $originalTime); dd(Carbon::parse($processedTime)->format('Y-m-d h:i:s'));
方案2:指定格式直接解析(更稳定)
无需修改原字符串,直接用createFromFormat方法匹配你当前的时间格式解析,可控性更高:
$originalTime = '2021-10-12T09:20:27:915 GMT+0600'; // 格式字符说明:\T是匹配固定字符T,:v匹配冒号+3位毫秒,e匹配时区标识 $date = Carbon::createFromFormat('Y-m-d\TH:i:s:v e', $originalTime); dd($date->format('Y-m-d h:i:s'));
内容的提问来源于stack exchange,提问作者kashfiq
相关产品推荐
相关产品推荐

