PHP实现指定时间的n月之前的这一天的两种算法

来源:互联网 发布:do while vb 编辑:程序博客网 时间:2024/04/30 13:27
/***根据$endtime,返回指定$monthes月之前的日*/function severalMonthAgo($endtime,$monthes){if (!$endtime) {return false;}if (!is_int($monthes) || $monthes <=0) {return false;}$m = date("m",$endtime);$y = date("Y",$endtime);$d = date("d",$endtime);$year = floor($monthes/12);$monthes_mod = $monthes%12;if($year == 0){//<12个月if($m < $monthes){//当前月份小于n月前$res_y = $y-1;$res_m = 12-($monthes-$m);$t = date("t",strtotime($res_y."-".$res_m."-01"));if($d<$t){$res_d = $d;}else{$res_d = $t;}}elseif($m == $monthes){$res_y = $y-1;$res_m = 12;$t = date("t",strtotime($res_y."-".$res_m."-01"));if($d<$t){$res_d = $d;}else{$res_d = $t;}}elseif($m>$monthes){$res_y = $y;$res_m = $m-$monthes;$t = date("t",strtotime($res_y."-".$res_m."-01"));if($d<$t){$res_d = $d;}else{$res_d = $t;}}}elseif($year>0){$y = $y-$year;$monthes = $monthes_mod;if($m < $monthes){//当前月份小于n月前$res_y = $y-1;$res_m = 12-($monthes-$m);$t = date("t",strtotime($res_y."-".$res_m."-01"));if($d<$t){$res_d = $d;}else{$res_d = $t;}}elseif($m == $monthes){$res_y = $y-1;$res_m = 12;$t = date("t",strtotime($res_y."-".$res_m."-01"));if($d<$t){$res_d = $d;}else{$res_d = $t;}}elseif($m>$monthes){$res_y = $y;$res_m = $m-$monthes;$t = date("t",strtotime($res_y."-".$res_m."-01"));if($d<$t){$res_d = $d;}else{$res_d = $t;}}}return strtotime($res_y."-".$res_m."-".$res_d);}/***根据$endtime,返回指定$monthes月之前的日*/function severalMonthAgoEx($endtime,$monthes){if (!$endtime) {return false;}if (!is_int($monthes) || $monthes <=0) {return false;}$m = date("m",$endtime);$y = date("Y",$endtime);$d = date("d",$endtime);$year = floor($monthes/12);$monthes_mod = $monthes%12;$y -= $year;//$year =0或>0;//$monthes_mod =0或>0或if ($year>0) {if ($monthes_mod>0) {$m_diff = 12+$m-$monthes_mod;$m_diff_div = floor($m_diff/12);$m_diff_mod = $m_diff%12;if ($m_diff_div > 0) {$res_y = $y;$res_m = $m_diff_mod;}elseif ($m_diff_div == 0) {$res_y = $y -1;$res_m = $m_diff_mod;}}elseif ($monthes_mod==0) {//整除$res_y = $y;$res_m = $m;}}elseif ($year == 0) {$m_diff = 12+$m-$monthes_mod;$m_diff_div = floor($m_diff/12);$m_diff_mod = $m_diff%12;if ($m_diff_div > 0) {$res_y = $y;}elseif ($m_diff_div == 0) {$res_y = $y -1;}$res_m = $m_diff_mod;}$t = date("t",strtotime($res_y."-".$res_m."-01"));if($d<$t){$res_d = $d;}else{$res_d = $t;}return strtotime($res_y."-".$res_m."-".$res_d);}

0 0
原创粉丝点击