关于PHP倒班日历的算法

闲来无聊,从网上找了个简易的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整除,相对这个简单些。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注