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

PHP中将dd/mm/yyyy格式日期转换时显示错误日期求助

为什么你的PHP日期转换会得到1970年的错误日期?

哦,这个问题我太熟悉啦!咱们先拆解下你代码里的问题:

问题根源:strtotime()不识别dd/mm/yyyy格式

strtotime()函数在解析日期时,默认遵循美式日期格式(mm/dd/yyyy)或者ISO标准格式(yyyy-mm-dd)。当你传入29/01/2018时,它会误以为是“29月1日2018年”——这显然是无效日期,所以strtotime()会返回false。

而date()函数遇到false时,会自动把它转换成Unix时间戳的起始点(也就是1970年1月1日),这就是为什么你看到了Thursday 1st January 1970的原因。

正确的解决方法:用DateTime::createFromFormat()指定解析格式

PHP的DateTime类提供了更灵活的日期解析方式,你可以明确告诉它输入日期的格式,这样就不会出错啦。试试下面的代码:

$date = '29/01/2018';
// 按dd/mm/yyyy的格式解析输入日期
$datetimeObj = DateTime::createFromFormat('d/m/Y', $date);
// 输出你想要的格式:星期几 日+后缀 月份全称 年份
echo $datetimeObj->format('l jS F Y');

运行这段代码,就能得到正确的结果:Monday 29th January 2018。

额外小技巧:校验日期有效性(可选)

如果担心输入的日期可能是无效格式(比如30/02/2024这种不存在的日期),可以加个校验逻辑:

$date = '29/01/2018';
$datetimeObj = DateTime::createFromFormat('d/m/Y', $date);

// 检查解析是否成功,并且确保解析后的日期和原输入一致(避免类似"32/01/2018"被自动修正的情况)
if ($datetimeObj && $datetimeObj->format('d/m/Y') === $date) {
    echo $datetimeObj->format('l jS F Y');
} else {
    echo '抱歉,这是一个无效的日期格式';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:30:48