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

PHP日期格式转换求助:12/May/2018转2018-12-05得1969-12-31

解决PHP日期格式转换失败(输出1969-12-31)的问题

这个坑我之前踩过!你遇到的问题根源是strtotime()没法正确识别12/May/2018这种日/英文月缩写/年的格式,导致解析失败返回false,而date()函数接收到false时,会默认输出Unix纪元起始点(1970-01-01)的前一天日期(也就是1969-12-31,和时区设置有关)。

靠谱的解决办法:用DateTime::createFromFormat()

PHP的DateTime类提供了createFromFormat()方法,它可以按照指定的格式去解析日期字符串,完美适配这种自定义格式的日期转换需求。

直接上代码:

$originalDate = "12/May/2018";
// 按照原日期的格式规则解析:d=两位日,M=英文月缩写,Y=四位年
$dateInstance = DateTime::createFromFormat('d/M/Y', $originalDate);

// 先判断解析是否成功,避免异常
if ($dateInstance) {
    $newDate = $dateInstance->format('Y-m-d');
    echo $newDate; // 输出:2018-05-12
} else {
    echo "日期格式错误,无法解析";
}

为什么原来的方法不行?

strtotime()对日期格式的识别是有默认规则的:当它看到/作为分隔符时,会默认按照月/日/年的格式去解析。你的原日期是12/May/2018,它会把12当成月份,再结合后面的May(五月),格式冲突导致直接解析失败返回false,最终让date()输出了那个奇怪的1969日期。

内容的提问来源于stack exchange,提问作者Helena Hannah George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:33:10