php日期加减:strtotime引起的不靠谱日期

现在有这样一个需求:查询当前时间之前三个月注册的用户,这时候你可能就会直接写出下面的代码假设你有用户注册的时间,且为常用时间格式(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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值