1

サービスの時間使用量に基づいてクライアントに課金するアプリケーションを作成しています。問題は、サービスが 1 日の事前に指定された時間帯に 2 倍の料金を請求される可能性があることです。

たとえば、ドキュメントを印刷するサービスがあり、プリンターの使用料金が 1 時間あたり 5 ユーロで、23:00 から午前 2:00 までは 10 ユーロであるとします。また、クライアントは好きなだけプリンターをレンタルできます。これは、1分から数か月、さらには数年になる場合があります。

今、特定の問題:

クライアントが私のオフィスに来て、プリンターを 55 時間レンタルするとします。また、レンタルは夜20時からです。

したがって、充電は 1 回の充電で 43 時間、2 回の充電で 12 時間必要です。2 つの例の画像を次に示します。

例の写真 ここに画像の説明を入力

さて、時間について追加情報をお伝えしましょう。プログラミングでは、各時間には、1970 年 1 月 1 日 00:00:00 から秒単位まで経過した時間であるというタイムスタンプがあります。

したがって、日付​​2012 年 7 月 5 日 11:15:40のタイムスタンプは1373022940であり、日付2012 年 7 月 5 日 11:15:50のタイムスタンプは1373022950 です。

上記の例では、最初の例が 2013 年 5 月 1 日の日付に配置されているとします。したがって、23:00 のタイムスタンプは1367449200になり、3 日後の午前 02:00 のタイムスタンプは1367546400になります。

今質問:

時間枠から二重請求時間の期間を抽出する方法はありますか? もしそうなら、プロセスは何ですか?

4

2 に答える 2

1

もちろんあります。日付間の間隔を数えるだけです。

誰かが 8:00 からサービスを利用し始め、16:00 に終了したとします。

8:00 - 16:00 の料金 = 2$ 16:00 - 8:00 の料金 = 1$

そのため、使用開始時刻と使用終了時刻をタイムスタンプに変換する必要があります

date_default_timezone_set('UTC');
$day_start = '2011-06-22';
$day_end   = '2011-06-22';
$start_usage = strtotime($day_start.' 8:00');
$end_usage   = strtotime($day_end.' 17:00');
$price_low_rate = 1;  //price for using service 16-8
$price_high_rate = 2; // price for using service since 8-16

$fee_for_eight_sixteen = 0; // total price for using service since 8-16
$fee_for_sixteen_eight = 0; // total price for using service 16-8
if($end_usage >strtotime($day_start.' 16:01'))
{
  $fee_for_sixteen_eight = ($end_usage - strtotime($day_end.' 16:00'))/3600 * $price_low_rate;
}

if($start_usage >= strtotime($day_start.' 8:00'))
{
  $fee_for_eight_sixteen = (strtotime($day_end.' 16:00') - $start_usage)/3600 * $price_high_rate;
}

echo $fee_for_eight_sixteen.' - '.$fee_for_sixteen_eight;

私はそれをテストしましたが、動作します。それが役に立てば幸い。

于 2013-07-10T08:18:03.710 に答える