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
相关产品推荐
相关产品推荐

