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;
}`