经常会有人被strtotime结合-1 month, +1 month, next month的时候搞得很困惑, 然后就会觉得这个函数有点不那么靠谱, 动不动就出问题. 用的时候就会很慌。例如

var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2017-07-31"))));

大家觉得会输出什么???没错 输出的是2017-07-01。大家可以自己试一下。原因是07-31做减1操作是06-31,再做日期日期规范化,但是6月我们知道没有31号就像1小时等60分,3:60等于4点一样。6-31等于7-01一样。那怎么办呢?

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

 var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2017-07-31"))));

下面是我自己做的测试。

 

8 个评论

发表评论

电子邮件地址不会被公开。