2

我正在为我的客户创建一个脚本,从早上 5:00 到晚上 24:00 收取“x”费用。然后从早上 12:00 到 5:00,收费为“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 小时。

亲切的问候梅里亚诺斯尼科斯

4

2 回答 2

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

?>
于 2013-01-02T17:56:15.877 回答
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
于 2013-01-02T18:06:35.627 回答