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

PHP mktime()返回意外结果,如何修正以得到正确日期2018-03-31?

解决mktime()日期输出异常的问题

嘿,这个问题我之前也踩过坑!问题的核心是你搞混了mktime()函数的参数顺序,导致PHP自动做了日期溢出计算。

问题原因

mktime()的参数顺序是时、分、秒、月、日、年,也就是:

mktime(hour, minute, second, month, day, year)

你写的代码里把31(本该是日期)放到了月份的参数位置,3(本该是月份)放到了日期的位置。PHP遇到超过合理范围的月份时,会自动计算溢出:31个月等于2年零7个月,2018年加上2年就是2020年,再加上7个月,日期用你传入的3日,最终就得到了2020-07-03。

解决方法

方法1:修正mktime()的参数顺序

把月份和日期的位置调换过来,代码改成这样:

<?php echo date('Y-m-d', mktime(0,0,0,3,31,2018)); ?>

这样就能正确输出2018-03-31了。

方法2:使用DateTime类(更推荐)

mktime()的参数顺序很容易记混,推荐用PHP的DateTime类来处理日期,可读性更强,也不容易出错:

<?php echo (new DateTime('2018-03-31'))->format('Y-m-d'); ?>

或者用简化的写法:

<?php echo date_create('2018-03-31')->format('Y-m-d'); ?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:24:24