失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > PHP strtotime 获取自然月误差问题解决方案

PHP strtotime 获取自然月误差问题解决方案

时间:2023-08-27 00:29:10

相关推荐

PHP strtotime 获取自然月误差问题解决方案

基本写法产生的差异

for($i=1;$i<150;$i++){$date = date('Y-m-d',strtotime("+{$i} day",strtotime('-01-25')));echo $date.' >>> ';// echo getNaturalMonth(-1,$date,true);echo date('Y-m-d',strtotime('+1 month',strtotime($date)));echo PHP_EOL;}

优化写法:

/*** 获取某个时间的下一个自然月日期* @date /5/31* @param int $num 增加月数 1增加一个月 -1减少一个月* @param null $date 日期* @param bool $is_supplement 如果是当前时间是本月最后一天则获取的新的自然月自动返回最后一天日期* @return false|string|null*/function getNaturalMonth($num = 1,$date=null,$is_supplement = false){$new_date = null;$time = isset($date) ? strtotime($date): time();$_time = strtotime($num.' month',$time);$new_date = date('Y-m-d',$_time);$new_day = date('d',$_time);if($is_supplement == true && $new_day == date('t',$time)) { //当前日期是最后一天$new_date = date('Y-m-t', strtotime('last day of ' . $num . ' month', $time));} elseif($new_day != date('d',$time)){ //判断获取的月份天是不是与当前日期天相同$new_date = date('Y-m-d',strtotime('last day of '.$num.' month',$time));}return $new_date;}

当$is_supplement = false时

-01-26 >>> -02-26-01-27 >>> -02-27-01-28 >>> -02-28-01-29 >>> -02-28-01-30 >>> -02-28-01-31 >>> -02-28-02-01 >>> -03-01-02-02 >>> -03-02-02-03 >>> -03-03-02-04 >>> -03-04-02-05 >>> -03-05-02-06 >>> -03-06-02-07 >>> -03-07-02-08 >>> -03-08-02-09 >>> -03-09-02-10 >>> -03-10-02-11 >>> -03-11-02-12 >>> -03-12-02-13 >>> -03-13-02-14 >>> -03-14-02-15 >>> -03-15-02-16 >>> -03-16-02-17 >>> -03-17-02-18 >>> -03-18-02-19 >>> -03-19-02-20 >>> -03-22-02-21 >>> -03-21-02-22 >>> -03-22-02-23 >>> -03-23-02-24 >>> -03-24-02-25 >>> -03-25-02-26 >>> -03-26-02-27 >>> -03-27-02-28 >>> -03-28-03-01 >>> -04-01-03-02 >>> -04-02-03-03 >>> -04-03-03-04 >>> -04-04-03-05 >>> -04-05-03-06 >>> -04-06-03-07 >>> -04-07-03-08 >>> -04-08-03-09 >>> -04-09-03-10 >>> -04-10-03-11 >>> -04-11-03-12 >>> -04-12-03-13 >>> -04-13-03-14 >>> -04-14-03-15 >>> -04-15-03-16 >>> -04-16-03-17 >>> -04-17-03-18 >>> -04-18-03-19 >>> -04-19-03-20 >>> -04-22-03-21 >>> -04-21-03-22 >>> -04-22-03-23 >>> -04-23-03-24 >>> -04-24-03-25 >>> -04-25-03-26 >>> -04-26-03-27 >>> -04-27-03-28 >>> -04-28-03-29 >>> -04-29-03-30 >>> -04-30-03-31 >>> -04-30-04-01 >>> -05-01-04-02 >>> -05-02-04-03 >>> -05-03-04-04 >>> -05-04-04-05 >>> -05-05-04-06 >>> -05-06-04-07 >>> -05-07-04-08 >>> -05-08-04-09 >>> -05-09-04-10 >>> -05-10-04-11 >>> -05-11-04-12 >>> -05-12-04-13 >>> -05-13-04-14 >>> -05-14-04-15 >>> -05-15-04-16 >>> -05-16-04-17 >>> -05-17-04-18 >>> -05-18-04-19 >>> -05-19-04-20 >>> -05-22-04-21 >>> -05-21-04-22 >>> -05-22-04-23 >>> -05-23-04-24 >>> -05-24-04-25 >>> -05-25-04-26 >>> -05-26-04-27 >>> -05-27-04-28 >>> -05-28-04-29 >>> -05-29-04-30 >>> -05-30-05-01 >>> -06-01

当$is_supplement =true时

-01-26 >>> -02-26-01-27 >>> -02-27-01-28 >>> -02-28-01-29 >>> -02-28-01-30 >>> -02-28-01-31 >>> -02-28-02-01 >>> -03-01-02-02 >>> -03-02-02-03 >>> -03-03-02-04 >>> -03-04-02-05 >>> -03-05-02-06 >>> -03-06-02-07 >>> -03-07-02-08 >>> -03-08-02-09 >>> -03-09-02-10 >>> -03-10-02-11 >>> -03-11-02-12 >>> -03-12-02-13 >>> -03-13-02-14 >>> -03-14-02-15 >>> -03-15-02-16 >>> -03-16-02-17 >>> -03-17-02-18 >>> -03-18-02-19 >>> -03-19-02-20 >>> -03-22-02-21 >>> -03-21-02-22 >>> -03-22-02-23 >>> -03-23-02-24 >>> -03-24-02-25 >>> -03-25-02-26 >>> -03-26-02-27 >>> -03-27-02-28 >>> -03-31-03-01 >>> -04-01-03-02 >>> -04-02-03-03 >>> -04-03-03-04 >>> -04-04-03-05 >>> -04-05-03-06 >>> -04-06-03-07 >>> -04-07-03-08 >>> -04-08-03-09 >>> -04-09-03-10 >>> -04-10-03-11 >>> -04-11-03-12 >>> -04-12-03-13 >>> -04-13-03-14 >>> -04-14-03-15 >>> -04-15-03-16 >>> -04-16-03-17 >>> -04-17-03-18 >>> -04-18-03-19 >>> -04-19-03-20 >>> -04-22-03-21 >>> -04-21-03-22 >>> -04-22-03-23 >>> -04-23-03-24 >>> -04-24-03-25 >>> -04-25-03-26 >>> -04-26-03-27 >>> -04-27-03-28 >>> -04-28-03-29 >>> -04-29-03-30 >>> -04-30-03-31 >>> -04-30-04-01 >>> -05-01-04-02 >>> -05-02

如果觉得《PHP strtotime 获取自然月误差问题解决方案》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。