2

朝の 5:00 から夜の 24:00 まで "x" の料金を請求するクライアントのスクリプトを作成しています。12時から翌朝5時までは「y」です。

たとえば、料金は次のとおりです。

05:00 to 24:00 -> 1.00 $
24:00 to 05:00 -> 2.00 $

クライアントは 23:00 にサービスを購入します。購入したサービスは完了するまでに 2 時間かかるため、高額な期間の料金を次のように変更します。

合計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

時間境界について知っておく必要があるだけです。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 に答える
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 に答える