我正在为我的客户创建一个脚本,从早上5点到晚上24点收取“x”费用。然后从早上12点到5点,费用是“y”。
让我们说,收费如下:
05:00 to 24:00 -> 1.00 $
24:00 to 05:00 -> 2.00 $
客户在23:00购买服务。购买的服务需要两个小时才能完成,所以我想更改昂贵时期的费用:
该服务总共2小时,从23:00开始,因此费用必须如下:
23:00 to 24:00 = 1 Hour x 1.00 $
24:00 to 01:00 = 1 Hour x 2.00 $
总计:3.00 $
此外,客户还可以在购买时手动设置服务的开始时间。
问题是,如何计算低成本期的时间和昂贵的时间段内的时间?
任何想法都将受到高度赞赏:)
PN:还必须考虑客户在23:00获得服务并且服务将在06:00结束的情况。这意味着客户必须以低成本充电2小时,高速充电5小时。
亲切的问候 Merianos Nikos
答案 0 :(得分:3)
尝试这样的事情:
<?php
$currentHour = date('G'); //gets the Hour of the day 24hour format 0-23
$currentMin = date('i'); //gets the minute
if ($currentHour > 5 && $currentHour < 23) {
//code to charge X
}
//repeat for other times
//Probably use a external DB or file to track the times/rates
?>
答案 1 :(得分:3)
您只需了解时间边界。除了获得当前的服务器时间之外,我认为你甚至不需要date
。
您需要查看充电时段的边界。
这似乎有效:
function get_charge($starttime, $proctime) {
$slots = array(
array(
"begin" => 5,
"end" => 24, // any number larger than 23 will do
"charge" => 1
),
array(
"begin" => 0, // 0 is 24, there will never be 24 (like on a clock)
"end" => 5,
"charge" => 2
)
); // make sure you have no overlapping slots, and no missing slots either
$charge = 0;
for ($i = 0; $i < $proctime; $i += 1) { // get the charge for each hour
$time = ($starttime + $i) % 24; // modulo 24 here so we go from 0 to 23
foreach($slots as $slot) {
if ($slot["begin"] <= $time && $time < $slot["end"]) {
$charge += $slot["charge"];
}
}
}
return $charge;
}
var_dump(get_charge(23, 2)); // 3
var_dump(get_charge(7, 2)); // 2
var_dump(get_charge(1, 3)); // 6
var_dump(get_charge(23, 50)); // 50 hour job, because we can