strtotime解析"00:20 AM"失败,如何正确转换日期为SQL格式?
解决PHP日期解析异常的问题
问题原因
strtotime函数无法识别00:20 AM这种矛盾的时间格式——AM时段的小时数常规范围是12(午夜)或1-11(上午),而00是24小时制的写法,两者混用导致strtotime解析失败,返回false。当date函数接收false作为时间戳参数时,会默认使用Unix时间戳0,对应日期就是1970-01-01 00:00:00。
正确解析方法
使用DateTime::createFromFormat(或其过程式风格的date_create_from_format)明确指定输入日期的格式,强制解析这种非常规写法的字符串:
// 待解析的日期字符串 $dateStr1 = "February 13 2022 10:08 PM"; $dateStr2 = "March 23 2022 00:20 AM"; // 自定义输入格式:F=完整月份名,j=无前置零的日期,Y=四位年份,H=24小时制小时,i=分钟,A=AM/PM标识 $format = 'F j Y H:i A'; // 解析并格式化为SQL兼容格式 $dt1 = DateTime::createFromFormat($format, $dateStr1); echo $dt1->format('Y-m-d H:i:s'); // 输出:2022-02-13 22:08:00 $dt2 = DateTime::createFromFormat($format, $dateStr2); echo $dt2->format('Y-m-d H:i:s'); // 输出:2022-03-23 00:20:00
这种方式不依赖自动识别逻辑,完全按照你指定的格式解析字符串,能稳定处理这类存在格式矛盾的日期。
内容的提问来源于stack exchange,提问作者Dumitru
相关产品推荐
相关产品推荐

