程序员

php中的strtotime的一个奇怪问题

2018-09-17  本文已影响0人  七剑演武堂

strtotime()是php日期函数当中非常灵活的一个函数, 可以实现一些语义化的操作. 比如: +1 day, -1 month, next year 这样的操作.
但是在实际体验当中,发现了一个奇怪的问题(今天是2016-03-31)

var_dump(date('Y-m-d', strtotime('2016-03-31 - 1 month')));

得出的结果是: string '2016-03-02' (length=10)

这不是扯呢么, 我明明让他减得是一个月啊, 我期望的结果是 '2016-02-28', 为什么会出现这样的情况呢?

我们从头开始去分析: 2016-03-31 减去一个月, 得到的结果是 2016-02-31, 但是2016年并没有2月31号, 只有29号

var_dump(date('Y-m-d', strtotime('2016-02-31')));

得到的结果是string '2016-03-02' (length=10)

这么看来strtotime函数并没有做错什么, 那我们怎么样才能得到我们预期的效果呢?

从PHP5.3开始呢, date新增了一系列修正短语, 来明确这个问题, 那就是”first day of” 和 “last day of”, 也就是你可以限定好不要让date自动”规范化”:

var_dump(date('Y-m-d', strtotime('last day of 2016-03-31 - 1 month')));   //2016-02-29
var_dump(date('Y-m-d', strtotime('first day of 2016-02-29 + 1 month')));  //2016-03-01

弄明白了这些, 就能更好的使用strtotime函数, 达到我们的预期结果.

上一篇下一篇

猜你喜欢

热点阅读