球场分时段计费算法
1.输入数据 开始结束时间
2.变量(时间段,单价,初始价,封顶价)
3.思路 :(1).传入开始结束时间,提取必要的对比信息(开始结束小时,时间戳,经过时长)。(2.)根据时间创建1-2的数组。(2.循环时间数组,调用不同时间段的计价方法)
不废话,直接贴贴代码
public $stime = "2018-08-04 23:41:00";//开始时间
public $etime = "2018-08-05 19:55:00";//结束时间
public $h1=6; //第一时段结束 第二时段开始的小时
public $h2=12;//第二时段结束 第三时段开始的小时
public $h3=18;//第三时段结束 第四时段开始的小时
public $b_price=10; //起步价1
public $price1=0.1; // 第一时段价格
public $price2=0.2; // 第二时段价格
public $price3=0.3; // 第三时段价格
public $price4=0.5; // 第四时段价格
public $top1=22; //封顶价1
public $top2=25; //封顶价2
public $top3=28; //封顶价3
public $top4=32; //封顶价4
public $sum=0;//总价
public $sum1=0;//第1时段价格
public $sum2=0;//第2时段价格
public $sum3=0;//第3时段价格
public $sum4=0;//第4时段价格
public $sum2_1=0;//第2-1时段价格
public $sum2_2=0;//第2-2时段价格
public $sum2_3=0;//第2-3时段价格
public $sum2_4=0;//第2-4时段价格
/**
* 球场计价算法
* @param 开始 结束时间
* @return string 消费金额,消费时段,消费明细
*/
//http://localhost/baoxian/home/sum/test/stime/2018-08-04%2001:00:00/etime/2018-08-06%2001:15:05
public function test()
{
//$stime=$_GET['stime'];//开始时间
//$etime=$_GET['etime'];//结束时间
/* public $stime = "2018-08-04 03:02:00";//开始时间
public $etime = "2018-08-04 06:03:05";//结束时间 */
$sth=(int)substr($this->stime,11,2);//开始的小时
$stm=(int)substr($this->stime,14,2);//开始的分钟
$eth=(int)substr($this->etime,11,2);//结束的小时
$etm=(int)substr($this->etime,14,2);//结束的分钟
$st_00=strtotime(substr($this->stime,0,10));//开始日期 时间000 判断是否跨天
$st=strtotime($this->stime);//转时间戳
$et=strtotime($this->etime);
$et_st_00=$et - $st_00;//经过时长 0点开始(秒)
$et_st=$et - $st;//经过时长 不是 0点开始(秒)
//将时间分段 跨天用2天的数组
if($et_st_00 <= 86400)
{
$time_arr= array(0,$this->h1,$this->h2,$this->h3,24);//默认时段数组
}
else
{
$time_arr= array(0,$this->h1,$this->h2,$this->h3,24,24+$this->h1,24+$this->h2,24+$this->h3,48);//默认时段数组
}
//从开始世时间 左侧开始截取
if($sth >= 0 && $sth < $this->h1)
{
array_splice($time_arr, 0, 1, $sth);
}
else if($sth >= $this->h1 && $sth < $this->h2)
{
array_splice($time_arr, 0, 2, $sth);
}
else if($sth >= $this->h2 && $sth < $this->h3)
{
array_splice($time_arr, 0, 3, $sth);
}
else if($sth >= $this->h3 && $sth < 24)
{
array_splice($time_arr, 0, 4, $sth);
}
//dump($et_st_00>86400?$eth+24:$eth);
//从结束时间 右侧开始截取 结束时间不能=设置的时间点
if($eth>= $this->h3 && $eth< 24 && $et_st_00 - $this->h3*3600>0)
{
$eth=$et_st_00>86400?$eth+24:$eth;
array_splice($time_arr, count($time_arr)-1, 1, $eth);
}
else if($eth>= $this->h2 && $eth<= $this->h3 && $et_st_00 - $this->h2*3600>0)
{
$eth=$et_st_00>86400?$eth+24:$eth;
array_splice($time_arr, count($time_arr)-2, 2, $eth);
}
else if($eth>= $this->h1 && $eth<= $this->h2 && $et_st_00 - $this->h1*3600>0)
{
$eth=$et_st_00>86400?$eth+24:$eth;
array_splice($time_arr, count($time_arr)-3, 3, $eth);
}
else if($eth>= 0 && $eth<= $this->h1)
{
$eth=$et_st_00>86400?$eth+24:$eth;
array_splice($time_arr, count($time_arr)-4, 4, $eth);
}
//上面的是4个时段截取, 如果跨天 可以弄成8个时段截取后面的, 超两天直接封顶50元 跨天的第二天开始循环使用sum1 234
//dump($time_arr); //die;
//dump(