<?php
function CheckMoney(&$db,$userid,$checktype,$price,$addtime,&$alltime,&$alllength,$suspendtime)
{
	$money=0;
	if ($suspendtime=="") {
		$stoptime=time();
	}
	else {
		$stoptime=strtotime($suspendtime);
	}
	if ($checktype=="天") {			//按天结算，不是实际的总上网时间，重新计算
		if ($alltime>0) {		//实际上过网才算费用
			$alltime=DateDiff("d",strtotime($addtime),$stoptime);			//间隔的天数
			if ($alltime<1) {		//不足1天，算1天
				$alltime=1;
			}
			else {					//结帐日期超过开号日期1天以上
				if (intval(date("G",$stoptime))>=12) {		//当前（结帐）时间达到12点，再多加1天
					$alltime=$alltime+1;
				}
			}
			$money=round($alltime*$price,2);
		} else {
			$alltime=0;
			$money=0;
		}
	}
	elseif ($checktype=="小时") {				//按小时结算，精确到分钟
		if ($alltime>0) {			//有上网记录
			$alltime=round($alltime/3600,2);		//换算成小时，保留2位小数
			$money=round($alltime*$price,2);			//只保留小数点后两位
		} else {
			$alltime=0;
			$money=0;
		}
	}
	elseif ($checktype=="分钟") {				//按分钟结算，精确到分钟
		if ($alltime>0) {			//有上网记录
			$alltime=ceil($alltime/60);		//换算成分钟，不足1分钟,算1分钟
			if ($alltime<1) {				//不足1分钟,算1分钟
				$alltime=1;
			}
			$money=round($alltime*$price,2);		//只保留小数点后一位
		} else {
			$alltime=0;
			$money=0;
		}
	}
	elseif ($checktype=="包月") {					//按月结算，不是实际的总上网时间，重新计算
		if ($alltime>0) {		//实际上过网才算费用
			$alltime=DateDiff("d",strtotime($addtime),$stoptime);			//间隔的天数
			$alltime=round($alltime/31,1);			//换算成月数，按平均31天一个月计算，以避免和客人产生误解，只保留小数点后1位
			if ($alltime-(int)$alltime>0 && $alltime-(int)$alltime<=0.5) {
				$alltime=(int)$alltime+0.5;				//小数点后不足半月，算半月
			} else {
				if ($alltime-(int)$alltime>0.5 && $alltime-(int)$alltime<1) {
					$alltime=(int)$alltime+1;				//小数点后大于半月，不足1月，算1月
				}
			}
			$money=round($alltime*$price,2);
		} else {
			$alltime=0;
			$money=0;
		}
	}
	elseif ($checktype=="年") {					//按年结算，不是实际的总上网时间，重新计算
		if ($alltime>0) {		//实际上过网才算费用
			$alltime=DateDiff("d",strtotime($addtime),$stoptime);			//间隔的天数
			$alltime=$alltime/366;				//换算成年数，按一年366天计算
			if ($alltime-(int)$alltime>0.5) {
				$alltime=(int)$alltime+1;		//超过半年，加1年
			} else {
				if ($alltime-(int)$alltime>0) {
					$alltime=(int)$alltime+0.5;		//超过部分不足半年，加半年
				}
			}
			$money=round($alltime*$price,2);
		} else {
			$alltime=0;
			$money=0;
		}
	}
	elseif ($checktype=="流量(M)") {					//按流量(M)结算
		$money=round($alllength*$price,2);
	}
	elseif ($checktype=="流量(G)") {					//按流量(G)结算
		$alllength=round($alllength/1024,2);		//换算成G为单位，保留小数点后2位
		$money=round($alllength*$price,2);
	}
	else {								//免费
		$price=0;
		$money=0;
	}
	return $money;
}

//需要下面的结帐算法，则把上面的CheckMoney函数改名，再把下面的CheckMoney1函数改成CheckMoney函数
function CheckMoney1(&$db,$userid,$checktype,$price,$addtime,&$alltime,&$alllength,$suspendtime)
{
	$money=0;
	if ($suspendtime=="") {
		$stoptime=time();
	}
	else {
		$stoptime=strtotime($suspendtime);
	}
	if ($checktype=="天") {			//按天结算
		//结帐算法，天计费类型，如果某一天实际没有上网，该天不算费用。一天的时间，从前一天的12点开始到第二天的12点为止。
		if ($alltime>0) {		//实际上过网才算费用
			$alltime=DateDiff("d",strtotime($addtime),$stoptime);			//间隔的天数
			if ($alltime<1) {		//不足1天，直接算1天
				$alltime=1;
			} else {					//结帐日期超过开号日期1天以上
				$alltime=0;
				$time1=$addtime;
				while (strtotime($time1)<$stoptime) {		//依次检查每天有无上网记录，有则算1天，无则该天不算
					$tmptime=strtotime("+1 day",strtotime($time1));
					$time2=strftime("%Y-%m-%d 12:00:00",$tmptime);
					$tmprs = mysql_query( "select ipaddr from history where userid='".$userid."' and starttime>='".$time1."' and starttime<'".$time2."'",$db );
					if ($tmprow = mysql_fetch_array($tmprs)) {		//该天有上网记录，算1天
						mysql_free_result($tmprs);
						$alltime=$alltime+1;
					} else {					//该天没有开始上网时间，再检查该天有无上网结束时间
						mysql_free_result($tmprs);
						$tmprs = mysql_query( "select ipaddr from history where userid='".$userid."' and endtime>'".$time1."' and endtime<='".$time2."'",$db );
						if ($tmprow = mysql_fetch_array($tmprs)) {		//该天有上网记录，算1天
							$alltime=$alltime+1;
						}
						mysql_free_result($tmprs);
					}
					$time1=$time2;
				}
				if (intval(date("G",$stoptime))>=12) {		//当前（结帐）时间达到12点，再多加1天
					$time1=strftime("%Y-%m-%d 12:00:01",$stoptime);
					//检查12点以后还有没有上网记录，如果有，再加1天
					$tmprs = mysql_query( "select ipaddr from history where userid='".$userid."' and (starttime>='".$time1."' or endtime>='".$time1."')",$db );
					if ($tmprow = mysql_fetch_array($tmprs)) {		//有记录
						$alltime=$alltime+1;
					}
					mysql_free_result($tmprs);
				}
			}
		} else {
			$alltime=0;
		}
		$money=$alltime*$price;
	}
	elseif ($checktype=="小时") {				//按小时结算，精确到分钟
		//该结帐算法，支持每天的费用封顶
		if ($alltime>0) {			//有上网记录
			$money=0;
			$maxmoney=30;				//该数值为设定的每天的封顶费用，可以按实际需要修改
			$alltime=0;
			$time1=$addtime;
			while (strtotime($time1)<$stoptime) {		//依次计算每天的费用
				$tmptime=strtotime("+1 day",strtotime($time1));
				$time2=strftime("%Y-%m-%d 12:00:00",$tmptime);
				$tmprs = mysql_query( "select sum(usetime) from history where userid='".$userid."' and starttime>='".$time1."' and starttime<'".$time2."'",$db );
				if ($tmprow = mysql_fetch_array($tmprs)) {
					$usetime=$tmprow[0];
					if ($usetime>0) {
						$usetime=round($usetime/3600,2);
						$alltime=$alltime+$usetime;
						$tmpmoney=$usetime*$price;
						if ($tmpmoney>$maxmoney) {		//达到封顶费用
							$money=$money+$maxmoney;
						}
						else {
							$money=$money+$tmpmoney;
						}
					}
				}
				mysql_free_result($tmprs);
				$time1=$time2;
			}
			if (intval(date("G",$stoptime))>=12) {		//当前（结帐）时间达到12点
				$time1=strftime("%Y-%m-%d 12:00:01",$stoptime);
				//检查12点以后还有没有上网记录
				$tmprs = mysql_query( "select sum(usetime) from history where userid='".$userid."' and starttime>='".$time1."'",$db );
				if ($tmprow = mysql_fetch_array($tmprs)) {
					$usetime=$tmprow[0];
					if ($usetime>0) {
						$usetime=round($usetime/3600,2);
						$alltime=$alltime+$usetime;
						$tmpmoney=$usetime*$price;
						if ($tmpmoney>$maxmoney) {		//达到封顶费用
							$money=$money+$maxmoney;
						}
						else {
							$money=$money+$tmpmoney;
						}
					}
				}
				mysql_free_result($tmprs);
			}
			$money=round($money,2);
		}
		else {
			$alltime=0;
			$money=$alltime*$price;
		}
	}
	elseif ($checktype=="分钟") {				//按分钟结算，精确到分钟
		if ($alltime>0) {			//有上网记录
			$alltime=ceil($alltime/60);		//换算成分钟，不足1分钟,算1分钟
			if ($alltime<1) {				//不足1分钟,算1分钟
				$alltime=1;
			}
			$money=round($alltime*$price,2);		//只保留小数点后一位
		} else {
			$alltime=0;
			$money=0;
		}
	}
	elseif ($checktype=="包月") {					//按月结算，不是实际的总上网时间，重新计算
		if ($alltime>0) {		//实际上过网才算费用
			$alltime=DateDiff("d",strtotime($addtime),$stoptime);			//间隔的天数
			$alltime=round($alltime/31,1);			//换算成月数，按平均31天一个月计算，以避免和客人产生误解，只保留小数点后1位
			if ($alltime-(int)$alltime>0 && $alltime-(int)$alltime<=0.5) {
				$alltime=(int)$alltime+0.5;				//小数点后不足半月，算半月
			} else {
				if ($alltime-(int)$alltime>0.5 && $alltime-(int)$alltime<1) {
					$alltime=(int)$alltime+1;				//小数点后大于半月，不足1月，算1月
				}
			}
			$money=round($alltime*$price,2);
		} else {
			$alltime=0;
			$money=0;
		}
	}
	elseif ($checktype=="年") {					//按年结算，不是实际的总上网时间，重新计算
		if ($alltime>0) {		//实际上过网才算费用
			$alltime=DateDiff("d",strtotime($addtime),$stoptime);			//间隔的天数
			$alltime=$alltime/366;				//换算成年数，按一年366天计算
			if ($alltime-(int)$alltime>0.5) {
				$alltime=(int)$alltime+1;		//超过半年，加1年
			} else {
				if ($alltime-(int)$alltime>0) {
					$alltime=(int)$alltime+0.5;		//超过部分不足半年，加半年
				}
			}
			$money=round($alltime*$price,2);
		} else {
			$alltime=0;
			$money=0;
		}
	}
	elseif ($checktype=="流量(M)") {					//按流量(M)结算
		$money=round($alllength*$price,2);
	}
	elseif ($checktype=="流量(G)") {					//按流量(G)结算
		$alllength=round($alllength/1024,2);		//换算成G为单位，保留小数点后2位
		$money=round($alllength*$price,2);
	}
	else {								//免费
		$price=0;
		$money=0;
	}
	return $money;
}

function DateDiff($opertype,$starttime,$endtime)
{
	if ($starttime>=$endtime) return 0;	//starttime在endtime之后，返回0
	$n=0;
	if ($opertype=="d") {
		if ( strftime("%Y-%m-%d",$starttime)==strftime("%Y-%m-%d",$endtime) ) return 0;	//同一天
		while (TRUE) {
			$n++;
			if ( strftime("%Y-%m-%d",strtotime("+".strval($n)." day",$starttime))==strftime("%Y-%m-%d",$endtime) ) {
				//年月日部分已经相同
				break;
			}
		}
	}
	elseif ($opertype=="m") {
		if ( strftime("%Y-%m",$starttime)==strftime("%Y-%m",$endtime) ) return 0;	//同一月
		while (TRUE) {
			$n++;
			if ( strftime("%Y-%m",strtotime("+".strval($n)." month",$starttime))==strftime("%Y-%m",$endtime) ) {
				//年月部分已经相同
				break;
			}
		}
	}
	elseif ($opertype=="yyyy") {
		if ( strftime("%Y",$starttime)==strftime("%Y",$endtime) ) return 0;	//同一年
		while (TRUE) {
			$n++;
			if ( strftime("%Y",strtotime("+".strval($n)." year",$starttime))==strftime("%Y",$endtime) ) {
				//年部分已经相同
				break;
			}
		}
	}
	elseif ($opertype=="s") {
		$n=$endtime-$starttime;
	}
	else {
		$n=0;
	}
	return $n;
}
?>
