PHP |时间计算

时间:2013-01-02 17:50:55

标签: php datetime time

我正在为我的客户创建一个脚本,从早上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

2 个答案:

答案 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