php自带的date转换的时候如果需要自然月的日子,当遇到日子不同时候可能导致不是预期的结果,以下函数修正了这个问题,   调用方法:echo dateadd('m',1,'2018-01-31',1);//不需要自然月的时候最后一个参数不填,需要的时候,填写任意值即可。 `function DateAdd($part, $n, $date,$realDay=0) { switch($part) { case "y": $val = date("Y-m-d H:i:s", strtotime($date ." +$n year")); break; case "m": $val = date("Y-m-d H:i:s", strtotime($date ." +$n month")); //如果需要自然月则判断日子是否相同,不同就执行转换 if($realDay!=0&&date('d',strtotime($date))!=date('d',strtotime($val))){ $val = date("Y-m", strtotime($date)); $val = date('Y-m-d', strtotime(date("$val-01") . " -1 day +$n+2 month")); $val.= date(' H:i:s', strtotime($date)); } break; case "w": $val = date("Y-m-d H:i:s", strtotime($date ." +$n week")); break; case "d": $val = date("Y-m-d H:i:s", strtotime($date ." +$n day")); break; case "h": $val = date("Y-m-d H:i:s", strtotime($date ." +$n hour")); break; case "n": $val = date("Y-m-d H:i:s", strtotime($date ." +$n minute")); break; case "s": $val = date("Y-m-d H:i:s", strtotime($date ." +$n second")); break; } return $val; }`