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

php的strtotime方法你真的了解吗

时间:2023-03-29 22:57:01 PHP

前言熟悉PHP的都知道strtotime方法是一种将日期字符串转换成时间戳的方法,但是strtotime的使用坑很多。值得注意的是,考试日期是2020-02-31。很明显这是一个错误的日期,strtotime方法是不会报错的,但会计算到2020-03-02echostrtotime('2020-02-31')的时间戳。PHP_EOL;//Output1583078400echodate('Y-m-d',strtotime('2020-02-31')).PHP_EOL;//2020-03-02在下面的日期部分,我们写了把31换成32。结果不是我们预期的,会按2020-03-03的时间戳计算,返回空,32已经超过31,不在正常的日期范围内,源码应该验证这个echostrtotime('2020-02-32')。PHP_EOL;//输出为空如果我们需要在指定的日期上加一个月,怎么写呢,一般都会这样写,但是输出的结果可能会让你大吃一惊。6月份只有30天,+1月份输出到7-1。echodate('Y-m-d',strtotime("+1month",strtotime('2020-05-31'))).PHP_EOL;//2020-07-01从PHP5.3开始,date增加了一系列的修正短语来明确这个问题,就是“firstdayof”和“lastdayof”,也就是你可以这样限制日期不会自动“规范化”:添加n个月的正确用法echodate('Y-m-d',strtotime("lastdayofnextmonth",strtotime('2020-5-31')))。PHP_EOL;//2020-06-30echodate('Y-m-d',strtotime("下个月第一天",strtotime('2020-5-31'))).PHP_EOL;//2020-06-01echodate('Y-m-d',strtotime("+4月的最后一天",strtotime('2020-5-31'))).PHP_EOL;//2020-09-30ifstrtotime方法内部实现如果有兴趣可以参考我之前的文章文章通过gdb调试学习strtotime源码https://segmentfault.com/a/11...参考鸟哥文章:https://www.laruence.com/2018...