你不知道PHP的DateTime类坑点
PHP的DateTime主要功能是用来处理日期和时间,日常中用起来也很方便
输出当前时间
$datetime = new \DateTime; print_r($datetime->format('Y-m-d H:i:s'));
这里主要讲一下有些小伙伴在使用DateTime类中可能会出现的一些误区!
先来看一个需求:(获取指定时间的1分钟后的时间)
代码也很简单
$time = "2020-06-01 10:00:00"; // 指定的时间 $datetime = new \DateTime($time); $nextminute = $datetime->modify('+1 minute'); print_r($nexttime->format('Y-m-d H:i:s')); // 输出 "2020-06-01 10:01:00"
上面这样没问题!
来看一个新的需求(根据指定时间,同时获取1分钟后和1个月后的时间)
代码直接复制上面,很多人会这样写
$time = "2020-06-01 10:00:00"; // 指定的时间 $datetime = new \DateTime($time); $nextminute = $datetime->modify('+1 minute'); print_r($nextminute->format('Y-m-d H:i:s')); // 输出 "2020-06-01 10:01:00" $nextmonth = $datetime->modify('+1 month'); print_r($nextmonth->format('Y-m-d H:i:s')); // 理想输出 "2020-07-01 10:00:00" // 实际输出 "2020-07-01 10:01:00"
why?为什么下个月的时间多了1分钟?
这其实是一个坑!可能很多人不理解,其实这个时候的$datetime已经不是最早的那个$datetime了,它变了...
这时候的$datetime已经是$nextminute的值
可以在$nextmonth之前打印出$datetime对象观察
DateTime @1590976860 {#249 ▼ date: 2020-06-01 10:01:00.0 Asia/Shanghai (+08:00)}
所以,项目中如果有时候DateTime类的时候,当出现多个未来或者过去时间的计算,请注意初始的对象值是否已经改变!
声明:版权所有,违者必究 | 如未注明,均为原创 | 本网站采用 BY-NC-SA 协议进行授权
转载:转载请注明原文链接,违者必究 - :https://wolfcode.net/info/186/