-3

料金システムで料金が正しく計算されないという問題が発生しています。

以下は、1 つの価格で 2 日間を指定してから、別の価格で 1 日を指定するのではなく、日付範囲にまたがって実行した場合に実行されないコードです。以下はコードのサンプルです。

$(function () {
    function change_charges() {
        var checkin_mon = Number($("#checkindate_Month_ID").val());
        var checkin_day = Number($("#checkindate_Day_ID").val());
        var checkin_year = Number($("#checkindate_Year_ID").val());
        var checkout_mon = Number($("#checkoutdate_Month_ID").val());
        var checkout_day = Number($("#checkoutdate_Day_ID").val());
        var checkout_year = Number($("#checkoutdate_Year_ID").val());
        var checkin_date = new Date();
        checkin_date.setFullYear(checkin_year, checkin_mon, checkin_day);
        var checkout_date = new Date();
        checkout_date.setFullYear(checkout_year, checkout_mon, checkout_day);
        var one_day = 1000 * 60 * 60 * 24
        //Calculate difference btw the two dates, and convert to days
        var stay = Math.ceil((checkout_date.getTime() - checkin_date.getTime()) / (one_day));
        var room_type = $("#room_type").val();
        var charges = 0;
        var n_charges = 0;
        var st_date = new Date();
        var end_date = new Date();
        var mon_stay = 0;
        var rem_stay = 0;
        if (room_type == "Villa") {
            st_date.setFullYear(checkin_year, 4, 1);
            end_date.setFullYear(checkin_year, 9, 31);
            if (checkin_date >= st_date && checkin_date <= end_date) {
                charges = 1995;
                n_charges = 2995;
                if (checkout_date > end_date) mon_stay = Math.ceil((end_date.getTime() - checkin_date.getTime()) / (one_day));
            }
            st_date.setFullYear(checkin_year, 10, 1);
            end_date.setFullYear(checkin_year, 11, 15);
            if (checkin_date >= st_date && checkin_date <= end_date) {
                charges = 2995;
                n_charges = 2995;
                if (checkout_date > end_date) mon_stay = Math.ceil((end_date.getTime() - checkin_date.getTime()) / (one_day));
            }
            st_date.setFullYear(checkin_year, 11, 16);
            end_date.setFullYear(checkin_year, 11, 31);
            if (checkin_date >= st_date && checkin_date <= end_date) {
                charges = 5900;
                n_charges = 5900;
                if (checkout_date > end_date) mon_stay = Math.ceil((end_date.getTime() - checkin_date.getTime()) / (one_day));
            }
            st_date.setFullYear(checkin_year, 0, 1);
            end_date.setFullYear(checkin_year, 0, 15);
            if (checkin_date >= st_date && checkin_date <= end_date) {
                charges = 5900;
                n_charges = 3900;
                if (checkout_date > end_date) mon_stay = Math.ceil((end_date.getTime() - checkin_date.getTime()) / (one_day));
            }
            st_date.setFullYear(2013, 0, 16);
            end_date.setFullYear(2013, 3, 30);
            if (checkin_date >= st_date && checkin_date <= end_date) {
                charges = 3900;
                n_charges = 2223;
                if (checkout_date > end_date) mon_stay = Math.ceil((end_date.getTime() - checkin_date.getTime()) / (one_day));
            }

if(とどまる > 1){

   if(mon_stay == 0)mon_stay = 1;

   if(mon_stay != 0){
      rem_stay = stay - mon_stay;

      charges = (mon_stay*charges) + (rem_stay*n_charges);   

   }

   else
   charges*=stay;

}

var 今日 = 新しい日付 ();

if(チェックイン日 < 今日 || チェックアウト日 < 今日 || チェックアウト日 < チェックイン日){

    charges = 0;


}

$("#tot_charges").html(charges.toFixed(2));

}

$("#checkindate_Month_ID").change(関数() {

change_charges();

});

$("#checkindate_Day_ID").change(関数() {

change_charges();

});

$("#checkindate_Year_ID").change(関数() {

change_charges();

});

$("#checkoutdate_Month_ID").change(関数() {

change_charges();

});

$("#checkoutdate_Day_ID").change(関数() {

change_charges();

});

$("#checkoutdate_Year_ID").change(関数() {

change_charges();

});

$("#room_type").change(関数() {

change_charges();

});

4

1 に答える 1

1

あなたの計算関数は間違っています: 最初の例を取ります: 3 days @ 1995 =5985 コードは次のとおりです: stay=3 mon_stay=1 (あなたが書いたので: if mon_stay =0 then mon_stay=1) then

料金 = 1*1995 + 2* 2995 = 7985 !

より良い式は(私は思うが、理解するのは難しい)

charges = (mon_stay*n_charges) + (rem_stay*charges);

mon_stay=1 なし (意図しない場合)

于 2012-10-26T12:29:49.943 に答える