Javascript 日期范围内的价格计算问题

Javascript 日期范围内的价格计算问题,javascript,Javascript,我在收费系统上的收费计算不正确 下面是一段代码,如果你在一个日期范围内运行,而不是在一个价格下给出2天,然后在另一个价格下给出1天,那么它不会。下面是代码示例: $(function () { function change_charges() { var checkin_mon = Number($("#checkindate_Month_ID").val()); var checkin_day = Number($("#checkindate_Day_

我在收费系统上的收费计算不正确

下面是一段代码,如果你在一个日期范围内运行,而不是在一个价格下给出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));
            }
}

var today=新日期

如果签入日期<今天| |签出日期<今天| |签出日期<签入日期{

    charges = 0;


}
$tot_charges.htmlcharges.toFixed2

}

$checkindate\u Month\u ID.change函数{

改变收费

})

$checkindate\u Day\u ID.change函数{

改变收费

})

$checkindate\u Year\u ID.change函数{

改变收费

})

$checkoutdate\u Month\u ID.change函数{

改变收费

})

$checkoutdate\u Day\u ID.change函数{

改变收费

})

$checkoutdate\u Year\u ID.change函数{

改变收费

})

$room\u type.changefunction{

改变收费


})

您的计算函数错误: 以你的第一个例子:3天@1995=5985 您的代码如下所示: 停留时间=3 mon_stay=1,因为您写道:如果mon_stay=0,那么mon_stay=1 然后

费用=1*1995+2*2995 = 7985 !

我想一个更好的公式是,但它很难理解

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

没有mon_stay=1,除非是有意的

我想你需要澄清你的问题。你的问题被描述为,不是以一个价格给予2天,然后以另一个价格给予1天。它是否应该总是以一种价格提供2天,然后以另一种价格提供?它现在在做什么?我一点也不清楚这里的目的是什么。1 28/10-31/10=3晚住宿-应该是3 x 1995=5985系统计算-7985这是一个例子,它没有计算这些日期的价格,而不是1995年的3天,它基本上应该在用户选择的任何日期给用户一个价格-如果价格如果在某个日期范围内,则应给出1个价格,该价格将日期范围两侧的价格组合在一起,以给出正确的总价格(如果有意义的话):请不要试图让别人破译你的计算算法。直接问一个问题,你的意思是没有mon_stay=1;它将计算为3 x 1995=5985?如果没有这一点,它将得到2,但不是4 14/12-17/12=3天-应该是2 x 2995&1 x 5990-11980实际上,完整的方法似乎很奇怪,因为如果您的停留时间超过2个时间段,那么这将失败。你可能宁愿把你的周期缩短几天,而不是浏览你的一天清单,然后把那一天的费用加起来。
charges = (mon_stay*n_charges) + (rem_stay*charges);