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