php判断两个日期是否周期变化

    判断两个日期是否周期变化:如开始日期为每个月1号,判断结束日期是否也是1号;若结束日期也是1号,则是周期变化。适用场景:如每年或每个月套餐定期扣费。

<?PHP
/**
 * @function	判断两个日期是否周期变化
 * @param	date	$start_date	开始日期
 * @param	date	$end_date	结束日期
 * @param	string	$type	周期类型:Y 以1年为周期 M 以1个月为周期
 * @return	boolean	ture/false
 */
function is_date_cycle($start_date, $end_date, $type){
	//开始日期
	$start_date = getdate(strtotime($start_date));
	$start_year = $start_date['year'];
	$start_month = $start_date['mon'];
	$start_day = $start_date['mday'];
	//结束日期
	$end_date = getdate(strtotime($end_date));
	$end_year = $end_date['year'];
	$end_month = $end_date['mon'];
	$end_day = $end_date['mday'];
	//1.1以月为周期:若同年且同月,则在同一周期,即未周期变化
	if($type == 'M' && ($start_year == $end_year && $start_month == $end_month)){
		return false;
	}
	//1.2以年为周期:若同年或不同月,则未周期变化
	if($type == 'Y' && ($start_year == $end_year || $start_month != $end_month)){
		return false;
	}
	//2.排除第1点,若两个日子相同,则是周期变化
	if($start_day == $end_day){
		return true;
	}
	//3.排除第2点,若是两个日子不同,不同月份也可能是周期变化
	//3.1 二月份的闰月判断
	if($end_month == 2 && $start_day >= 29){
		if(($end_year%4 == 0 && $end_year%100 != 0) || ($end_year%400 == 0)){
			if($end_day == 29){
				return true;
			}
		}else{
			if($end_day == 28){
				return true;
			}
		}
	}
	//3.2 三十天的月份判断
	$middle_month = array(4, 6, 9, 11);
	if(in_array($end_month, $middle_month) && $start_day >= 31){
		if($end_day == 30){
			return true;
		}
	}
	//4.其他则不是周期变化
	return false;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值