PHP 处理日期加减月 二月份问题 31日问题

php有一个日期处理的问题 每年3月31日往前推一个月会变成3月3日或者3月2日 即:date('Y-m-d', strtotime("-1 month",strtotime(date('2017-03-31')))); 本函数是处理这类问题的
/**
 * 处理日期加一段时间,兼容闰年和二月份
 * @author 5843310@qq.com at 2016-11-15 11:00:00
 * @param string $date 日期
 * @param string $type add-往后推移   sub-往前推移
 * @param string $changenum 改变的数值,跟changesuffix一起使用
 * @param string $changesuffix 月-month   天-day
 * @param int 	 $suffix 生成的日期日固定 如果suffix=8 则生成的日期为:'YYYY-MM-08'
 * @param bool 	 $indate 是否包含当天 如:date=2016-11-05,indate=false,结果为:2016-12-05,indate=true,结果为:2016-12-04
 * @return boolean
 */
function yzy_date($date, $changenum = 0, $changesuffix = 'month', $suffix = 0, $type = 'add', $indate = true){
	if(!$date || $date == ''){
		return false;
	}
	if($changenum == 0){
		if((int)$suffix == 0){
			return $date;
		}else{
			return date("Y-m-d",strtotime(date("Y-m-".$suffix,strtotime($date))));
		}
	}else{
		if($changesuffix == 'day'){
			$tempday = date("d",strtotime($date));
			$tempday += $changenum;
		}elseif($changesuffix == 'month'){
			$tempday = date("d",strtotime($date));
		}
		if($type == 'add'){
			$change = '+'.$changenum.' '.$changesuffix;
		}else{
			$change = '-'.$changenum.' '.$changesuffix;
		}
		$tempdate = date("Y-m-01",strtotime($date));
		$microtempdate = strtotime($change, strtotime($tempdate));
		$enddateallday = date('t',$microtempdate);
		if($tempday > $enddateallday){
			if($suffix > 0){
				if($enddateallday > $suffix){
					$enddatetemp = date("Y-m-d",strtotime(date('Y-m-'.$suffix,$microtempdate)));
				}else{
					$enddatetemp = date("Y-m-d",strtotime(date('Y-m-'.$enddateallday,$microtempdate)));
				}	
				
			}else{
				if($changesuffix == 'day'){
					$enddatetemp = date("Y-m-d",strtotime($change, strtotime($date))-86400);
				}else{
					$enddatetemp = date('Y-m-'.$enddateallday,$microtempdate);
				}
			}
			
		}else{
			if($suffix > 0){
				if($tempday > $suffix){
					$enddatetemp = date('Y-m-'.$suffix,$microtempdate);
				}else{
					$enddatetemp = date('Y-m-'.$tempday,$microtempdate);
				}	
			}else{
				if($indate){
					$enddatetemp = date("Y-m-d",strtotime(date('Y-m-'.$tempday,$microtempdate))-86400);
				}else{
					$enddatetemp = date('Y-m-'.$tempday,$microtempdate);
				}
			}
			
		}
		return $enddatetemp;
	}
}

//JS指定日期加上指定月数兼容二月份 date格式 2022-08-31 

//指定日期加上指定月数兼容二月份 date格式 2022-08-31
        ,addXmonth:function(date, num){
            var result = '';
            var datearr = date.split('-');
            var month1 = parseInt(datearr[1]);
            var day1 = parseInt(datearr[2]);
            var month2 = parseInt(num) + month1;
            var yearadd = Math.floor(month2/12);
            var month3 = month2%12;
            if(month3 == 0){
                month3 = 12;
                yearadd = yearadd-1;
            }
            var newdate = parseInt(datearr[0] + yearadd) + '-' + m.addZero(month3) + '-01';
            var newdatehasday = getlastDay(new Date(newdate));
            var lastday1 = parseInt(day1 - 1);
            if(lastday1 > 0){
                if(newdatehasday <= lastday1){
                    lastday1 = newdatehasday;
                }
                result = parseInt(parseInt(datearr[0]) + yearadd) + '-' + m.addZero(month3) + '-' + lastday1;
            }else{
                var lastd1;
                if(month3 > 1){
                    lastd1 = getlastmonthDay(new Date(datearr[0] + yearadd + '-' + m.addZero(month3) + '-01'));
                    result = parseInt(parseInt(datearr[0]) + yearadd) + '-' + m.addZero(month3-1) + '-' + lastd1;
                }else{
                    lastd1 = getlastDay(new Date(datearr[0] + yearadd - 1 + '-12-01'));
                    result = parseInt(parseInt(datearr[0]) + yearadd - 1) + '-12-' + lastd1;
                }
            }
            return result;
        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值