闲来无聊,从网上找了个简易的php日历,算班就省着天天数了,懒人嘛~
废话少说,就简单说说算法吧
三班(老爸这个上两个班休一个班,也就是白班?夜班?白班休?夜班?白班?夜班休……这个算法最乱)
算法就是每个白班(包括休息)间隔3天,每个夜班(包括休息)间隔3天,每个白班休息间隔9天,每个夜班休息间隔9天。
所以就是随意定义一个白班、一个夜班、一个白班休息、一个夜班休息。
然后用某一天和定义的任意一个班日期做比较,如果能被3整除,就是有班(包括休息)。如果能被9整除就说明是休班(不论白班还是夜班)。
代码如下:红字部分需要进行修改。
$jzb=strtotime(“2014-01-04“);//定义一个白班日期并转换为数值
$jzy=strtotime(“2014-01-05“);//定义一个夜班日期并转换为数值
$jzbx=strtotime(“2014-01-07“);//定义一个白班休班日期并转换为数值
$jzyx=strtotime(“2014-01-11“);//定义一个夜班休班日期并转换为数值
然后判定什么班:
如果是白班就是当天日期和定义日期差值白班可以被3整除但是白班休不能被9整除
如果是白班休就是当天日期和定义日期差值白班可以被3整除同时白班休能被9整除
如果是夜班就是当天日期和定义日期差值夜班可以被3整除但是夜班休不能被9整除
如果是夜班休就是当天日期和定义日期差值夜班可以被3整除同时夜班休能被9整除
$data1=($year.”-“.$month.”-“.$day);//定义日历日期
$data2=strtotime($data1);//日期转换为数值
$databai=round(($data2-$jzb)/3600/24%3);//计算日历日期和定义白班日期差值的余数
$dataye=round(($data2-$jzy)/3600/24%3);//计算日历日期和定义夜班日期差值的余数
$databaixiu=round(($data2-$jzbx)/3600/24%9);//计算日历日期和白休日期差值的余数
$datayexiu=round(($data2-$jzyx)/3600/24%9);//计算日历日期和夜休日期差值的余数
if(($databai==0)&&($databaixiu==0)){//如果白班差值余数为0且白班休息差值余数为0
echo $day.”白休”;//日期
}elseif(($databai==0)&&($databaixiu=!0)){//如果白班差值余数为0且白班休息差值余数不为0
echo $day.”白”;//日期
}elseif(($dataye==0)&&($datayexiu==0)){//如果夜班差值余数为0且夜班休息差值余数为0
echo $day.”夜休”;//日期
}elseif(($dataye==0)&&($datayexiu=!0)){//如果夜班差值余数为0且夜班休息差值余数不为0
echo $day.”夜”;//日期
}else//其他不写白班或者夜班
echo $day;//日期
四班和五班只需要定义一个白班日期和夜班日期就行,然后四班是能被4整除,5班是能被5整除,相对这个简单些。