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