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

