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

Excel日期字段转换问题:PHP日期格式转换结果异常求助

解决PHP日期转换异常的问题

这个问题的核心是strtotime对非标准日期格式的解析不可靠,我们来一步步搞定它:

问题原因

你把29/07/2008替换成29-07-2008后,strtotime会默认尝试按照MM-DD-YYYY(月-日-年)的格式解析,但29显然不是有效的月份(月份范围是1-12),所以它会错误地解析这个字符串,最终生成了混乱的日期结果(2029-07-08)。

推荐解决方案:使用DateTime类(更可靠)

PHP的DateTime类支持指定格式解析日期,完全避免了strtotime的模糊解析问题,代码如下:

$dateString = "29/07/2008 7:51:00 PM";
// 按照原日期的格式创建DateTime对象
$date = DateTime::createFromFormat('d/m/Y h:i:s A', $dateString);
// 格式化为你需要的格式:Y-m-d h:i:s(如果要24小时制,把h改成H即可)
$timestamp = $date->format('Y-m-d h:i:s');
echo $timestamp;

运行这段代码会输出你需要的:2008-07-29 07:51:00(如果需要24小时制的19:51:00,把h换成H就行)。

备选方案:手动重组日期格式(兼容旧PHP版本)

如果你因为环境限制不能用DateTime类,可以手动拆分日期部分,重组为strtotime能正确识别的YYYY-MM-DD格式:

$dateString = "29/07/2008 7:51:00 PM";
// 拆分日期和时间部分
list($datePart, $timePart) = explode(' ', $dateString, 2);
// 拆分日、月、年
list($day, $month, $year) = explode('/', $datePart);
// 重组为YYYY-MM-DD格式
$formattedDate = "$year-$month-$day $timePart";
// 转换并输出
$timestamp = date('Y-m-d h:i:s', strtotime($formattedDate));
echo $timestamp;

总结

尽量避免依赖strtotime解析非标准日期格式,DateTime类是PHP处理日期时间的首选方案,它更清晰、更可靠,能处理各种复杂的日期格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:52:56