当前位置: 首页 > 后端技术 > PHP

一个strtotime的使用问题

时间:2023-03-29 19:07:48 PHP

我在开发过程中遇到了这样的问题,因为着急,没有写下解决方案。在鸟哥的博客上看到了原理分析,很到位!在平时的开发中,遇到问题总是手忙脚乱,没有对问题进行深入的分析和记录。1、问题:今天是2018-07-31执行代码:date("Y-m-d",strtotime("-1month"))输出是2018-06-01?2、分析:先做-1月,则当前为07-31,减一后为06-31。然后做日期归一化,因为6月没有31号,所以好像2:60等于3点,6月31号等于7月12-1号。verifyvar_dump(date("Y-m-d",strtotime("2017-06-31")));//2017-07-01的输出只要涉及大小月的最后一天就可能有这个问题var_dump(date("Y-m-d",strtotime("-1month",strtotime("2017-03-31"))));//输出2017-03-03var_dump(date("Y-m-d",strtotime("+1个月",strtotime("2017-08-31"))));//输出2017-10-01var_dump(date("Y-m-d",strtotime("下个月",strtotime("2017-01-31"))));//输出2017-03-03var_dump(date("Y-m-d",strtotime("上个月",strtotime("2017-03-31"))));//输出2017-03-032-2,PHP5.3以后的解决方法版本处理方式是“firstdayof”和“lastdayof”,也就是可以限制一下,这样日期就不会自动“归一化”var_dump(date("Y-m-d",strtotime("-1月的最后一天",strtotime("2017-03-31"))));//输出2017-02-28var_dump(date("Y-m-d",strtotime("+1月的第一天",strtotime("2017-08-31"))));////输出2017-09-01var_dump(date("Y-m-d",strtotime("下个月的第一天",strtotime("2017-01-31"))));////输出2017-02-01var_dump(date("Y-m-d",strtotime("lastdayoflastmonth",strtotime("2017-03-31"))));////使用mktime之类输出2017-02-28,忽略所有的天,比如限制为The每个月的第一天都可以,但不如使用第一天那么优雅。参考资料:http://www.laruence.com/2018/...