2012-10-26 2 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; 

}

VAR 오늘 = 새로운 날짜();

경우 (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

없이

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

을 더 나은 공식 (I 생각하지만 이해하기 어려운) 일 것이다. 귀하의 문제는 "1 일 가격으로 2 일을주고 그 다음에 다른 가격으로 1 일을 말하지 않고"라고 기술되어 있습니다. 항상 1 일 가격으로 2 일을주고, 다른 가격으로 2 일을 주어야합니까? 대신 지금 뭐하고 있니? 여기에 의도 된 바가 전혀 분명하지 않습니다. –

+0

1) 28/10 - 31/10 = 3 박 체류 - 3 x이어야합니다. 1995 = 5985 시스템 계산 - 7985 – user1776951

+0

이 값은이 날짜의 가격을 계산하지 않는 한 예입니다. days @ 1995 – user1776951

답변

1

당신 계산 기능이 잘못 : 첫 번째 예 복용 = 5985 1995 @ 3 일 무엇 코드는 다음 숙박 = 3 mon_stay = 1 (당신이 쓴 때문에 : 만약 mon_stay = 0 다음 mon_stay = 1)

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

난 당신이 질문을 명확히 할 필요가 있다고 생각합니다 (의도하지 않는)을 mon_stay = 1

+0

그래서 mon_stay = 1; 그것은 3 x 1995 = 5985로 계산할 것인가? – user1776951

+0

그게 2하지만 맞지는 않지만 4) 14/12 - 17/12 = 3 일 - 2 x 2995 & 1 x 5990 - 11980 – user1776951

+0

아니 어쨌든 작동하지 않는 것 아니지만 귀하의 도움을 주셔서 감사합니다 – user1776951

관련 문제