You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP strtotime转换Excel时间戳异常,部分日期显示1970-01-01求助

解决PHP中strtotime()解析MM-DD-YYYY日期失败的问题

这问题我之前处理Excel导入MySQL时也踩过坑!核心原因是strtotime()的自动日期识别逻辑有歧义——它会优先尝试用欧洲式的DD-MM-YYYY格式去解析,而不是你预期的美式MM-DD-YYYY。

你看这两个例子的本质:

  • 当传入04-12-2018 0:00:53时,strtotime()把它当成了12日4月,所以输出2018-12-04 00:00:53
  • 当传入04-13-2018 0:00:53时,因为不存在13月,strtotime()直接返回false,而date()函数处理false时会默认输出Unix纪元起始时间1970-01-01 00:00:00

可靠的解决方案:用DateTime::createFromFormat()指定解析格式

与其依赖strtotime()的模糊自动识别,不如直接告诉PHP你的日期字符串固定格式,DateTime::createFromFormat()可以完美解决这个歧义问题,兼容性也更强。

替换你原来的代码为:

// 从Excel读取的原始日期字符串
$rawTime = trim($value->Time);
// 明确指定解析格式为MM-DD-YYYY H:i:s
$dateObj = DateTime::createFromFormat('m-d-Y H:i:s', $rawTime);

if ($dateObj) {
    // 格式化为MySQL需要的datetime格式
    $timestamp = $dateObj->format('Y-m-d H:i:s');
    // 这里即可将$timestamp插入MySQL数据库
} else {
    // 处理无效日期的情况,比如记录日志、跳过当前数据
    error_log("无效日期格式:{$rawTime}");
}

这个方法的优势

  • 无歧义:完全按照你指定的格式解析,不管日期是13号还是其他大于12的数字,都能正确识别成MM-DD-YYYY
  • 错误可控:如果传入的字符串不符合指定格式,会返回false,你可以针对性处理,避免脏数据进入数据库
  • 灵活性高:支持更多复杂的自定义日期格式,比strtotime()的自动识别更可靠

内容的提问来源于stack exchange,提问作者user3081672

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:03:20