现在有这样一个需求:查询当前时间之前三个月注册的用户,这时候你可能就会直接写出下面的代码假设你有用户注册的时间,且为常用时间格式(Y-m-d H:i:s)
//原日期(示例)
$time= '2020-01-09 23:23:23';
//新日期
$newDate = date('Y-m-d H:i:s',strtotime("-3 month",strtotime($time)));
echo $newDate; //2019-10-09 23:23:23
没什么问题,这时候你就可以去写查询和其他业务逻辑了,但是由于每月的天数并不统一,所以可能会出现
//原日期(示例)
$time = '2019-12-31 23:23:23';
//新日期
$newDate = date('Y-m-d H:i:s',strtotime("-3 month",strtotime($time)));
echo $newDate; //2019-10-01 23:23:23
这是因为月份加减就是对月份进行加减,此时得到到日期是2019-09-31 23:23:23,但是由于9月没有31号,因此这个日期就相当于2019-10-01 23:23:23,所以如果你需要按月来,而不是按天来的时候,代码需要改成,按天的话直接$newDate = date('Y-m-d H:i:s',strtotime("-90 day",strtotime($time)));
会更合适
//原日期(示例)
$time = '2019-12-31 23:23:23';
//本月天数
$days = date('t',time());
//原日期
$d = date('d',strtotime($time));
//如果是月末,月份加减
if ($d == $days){
$newDate = date('Y-m-d H:i:s',strtotime("last day of -3 month",strtotime($time)));
}else{
$newDate = date('Y-m-d H:i:s',strtotime("-3 month",strtotime($time)));
}
echo $newDate;