2012-10-26 60 views
-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)); 
      } 

如果(逗留> 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; 

}

變種今天=新的Date(;

如果(CHECKIN_DATE <今天|| CHECKOUT_DATE <今天|| CHECKOUT_DATE < CHECKIN_DATE){

charges = 0; 


} 

$( 「#tot_charges」)HTML(charges.toFixed(2))。

}

$( 「#checkindate_Month_ID」)發生變化。(函數(){

change_charges();

});

$( 「#checkindate_Day_ID」)發生變化(函數(){

change_charges();

})。

$( 「#checkindate_Year_ID」)發生變化(函數(){

change_charges();

})。

$( 「#checkoutdate_Month_ID」)發生變化(函數(){

change_charges();

})。

$( 「#checkoutdate_Day_ID」)發生變化(函數(){

change_charges();

})。

$( 「#checkoutdate_Year_ID」)發生變化(函數(){

change_charges();

})。

$(「#room_type」)。改變(功能(){

change_charges();

});

+2

我想你需要澄清你的問題。你的問題被描述爲「而不是以1天的價格給2天,然後說1天的價格不合理」。它應該總是以一個價格提供兩天,然後一個在另一個?現在它在做什麼呢?這對我來說並不明顯。 –

+0

1)28/10 - 31/10 =住3晚 - 應該是3 x 1995 = 5985 系統計算 - 7985 – user1776951

+0

這是一個例子,它不計算這些日期的價格 - 而不是3天@ 1995年 – user1776951

回答

1

你計算功能是錯誤的: 把你的第一個例子:3天@ 1995年= 5985 你的代碼如下: 住宿= 3 mon_stay = 1(因爲你寫的:如果mon_stay = 0,則mon_stay = 1) then

charges = 1 * 1995 + 2 * 2995 = 7985!

更好的公式將是(我想,但它很難理解)

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

沒有mon_stay = 1(除非它打算)

+0

所以你的意思是沒有mon_stay = 1;它會計算爲3 x 1995 = 5985? – user1776951

+0

沒有它得到2正確,但不是這4)14/12 - 17/12 = 3天 - 應該是2×2995和1×5990 - 11980 – user1776951

+0

沒有,似乎不工作,但感謝您的幫助 – user1776951