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

