したがって、プレミアム時間はすべて午前にあり、午後にはないので、12 から午後の時間を差し引くだけです。例では 12-9 で 3 時間を取得し、午前の 0 に任意の時間を追加します。再びあなたの例 0+2 はもちろん 2 時間です。次に、分を取得するために 60 倍します。各金額が請求されている金額でその時間を取得したら、それらを合計します。am/pm は、変数をそれぞれ true/false に設定するトグルにします。
コードは次のようになります。
//start_time and end_time are objects that have 2 properties, am/pm
//which is a bool and time which is a int
function calc_time(start_time,end_time){
var normal_pay;
var premium_pay;
if(start_time.pm == true){
normal_pay = 12 - start_time.time;
normal_pay = normal_pay * 60;
} else{
normal_pay = 0 + start_time.time;
normal_pay = normal_pay * 60 * 2; //this is premium time the whole night was premium pay
}
if(end_time.am == true){
premium_pay = 0 + end_time.time;
premium_pay = premium_pay * 60 * 2;
} else {
premium_pay = 12 - end_time.time;
premium_pay = premium_pay * 60; //this is normal time the whole night was normal pay
}
return premium_pay + normal_pay;
}
これは、午前 3 時 25 分に終了したいなどの議事録などを考慮する必要があるすべてを解決するわけではありませんが、それほど難しいことではありません。