2016-11-26 120 views
1

我使用JavaScript創建了一個按日期排序的計算器。Javascript預訂計算器不計算24小時爲1天

基本上我希望一天(24小時)或更少的基本價格是25英鎊,而每增加一天(每增加24小時),基本價格爲10英鎊。

下面是代碼的主要部分。

jQuery(document).ready(function($) { 

var prequote=25.00; 
var taxa = 10.00; 
var hoje = new Date(); 
hoje=hoje.getTime(); 
i = 0; 

$('#quote').click(function(event) { 

    var d1= $('#d1').val(); 
    var d2= $('#d2').val(); 
    var t1= $('#t1').val(); 
    var t2= $('#t2').val(); 

    console.log(d1); 
    console.log(d2); 
    console.log(t1); 
    console.log(t2); 

    // end - start returns difference in milliseconds 
    var date2 = new Date(d2); 
    var date1 = new Date(d1); 
    var millisecondsPerDay = 1000 * 60 * 60 * 24; 
    var millisBetween = date2.getTime() - date1.getTime(); 
    // get days 
    var d = millisBetween/millisecondsPerDay; 
    //alert ('value of days is:' +d); 
    //alert (new Date("1970-1-1 " + t2) - new Date("1970-1-1 " + t1))/1000/60/60; 
    var h= (new Date("1970-1-1 " + t2) - new Date("1970-1-1 " + t1))/1000/60/60; 
    //alert ('value of hours is:' +h);  
    t1 =t1.split(':'); 
    t2 =t2.split(':'); 


    var dat1 = d1.split("-"); 
    var dd1 = dat1[2]; 
    var mm1 = dat1[1]; 
    var yy1 = dat1[0]; 
    var hh1 = t1[0]; 
    var ms1 = t1[1]; 

    var dat2 = d2.split("-"); 
    var dd2 = dat2[2]; 
    var mm2 = dat2[1]; 
    var yy2 = dat2[0]; 
    var hh2 =t2[0]; 
    var ms2 = t2[1]; 


    var x1 = yy1 + ',' + mm1 + ',' + dd1 + ' ' + hh1 + ':' + ms1; 
    var x2 = yy2 + ',' + mm2 + ',' + dd2 + ' ' + hh2 + ':' + ms2; 

    var ent = dd1 + '/'+ mm1 +'/'+yy1+' '+ hh1 + ':' + ms1; 
    var ext = dd2 + '/'+ mm2 +'/'+yy2+' '+ hh2 + ':' + ms2; 


    var xi = yy1 + ',' + mm1 + ',' + dd1 ; 
    var xj = yy2 + ',' + mm2 + ',' + dd2 ; 


     var start =new Date(x1); 
     //var start_i =new Date(xi); 
     var end = new Date(x2); 
    // var end_i = new Date(xj); 
     start = start.getTime(); 
     end= end.getTime(); 
     if(start === end){ 
      alert('Min rental days is 1'); 
     } 
     else if(start < end){ 
      // hh1 = parseInt(hh1);ms1 = parseInt(ms1);hh2 = parseInt(hh2);ms2 = parseInt(ms2);; 
       /*while(start_i < end_i){ 
        i++; 
        var newDate = start_i.setDate(start_i.getDate() + 1); 
         start_i = new Date(newDate);       
       }*/ 

       i=d; 
       if(i >= 1){ 
        if(h > 0){ 
         i=i+1; 
        } 
        prequote = prequote + (taxa * (i-2)); 
        prequote = parseFloat(prequote.toFixed(2)); 
       }  

       $('#en-tex').text(ent); 
       $('#ex-t').text(ext); 
       $('#prequote').html(prequote); 
       $('#modal-img').modal('show'); 
       prequote=25.00; 

       $('#tupd').val(ent); 
       $('#tdod').val(ext); 
     } 
     else{ 
      alert('Please fill in all the date and time fields.'); 
     } 


}); 

的第一個問題是,如果我在上午9時至22日上午9時選擇例如21日星期一我不會算費用爲24小時。只有在結束日期是上午9點以後。

同樣,對於更長的日期,它只收取24小時後的一天而不是24小時後的點。

第二個問題是,如果有人選擇少於24小時(即週一21點在上午9點到週二22點上午7點),它將從10英鎊減少10英鎊。我希望它仍然報價25英鎊的基本價格。

+0

'var d = millisBetween/millisecondsPerDay;'它給你正確的結果 – Kumar

+0

是的,它給出了正確的結果。我實際上設法通過添加一個等號來排序24小時問題:'if(h> = 0)'而不是'if(h> 0)** **但是**我仍然有基礎價格問題。即如果有人選擇少於24小時的差價,則價格降至15英鎊。任何維持25英鎊的最低**價格的方法? – Sam

回答

0

既然你與整天工作,就可以通過簡化流程:

dt1 = new Date('2016-01-21 09:00:00'); 
dt2 = new Date('2016-01-22 09:00:00'); 
dif = dt2-dt1; 
dif = dif/(1000 * 60 * 60 * 24); 
days = Math.ceil(dif); 

天數值包含了兩個日期之間的天量的整數。從這個價值做你的定價。

+0

我實際上設法通過添加一個等號來排序24小時問題:'if(h> = 0)'而不是'if(h> 0)** **但是**我仍然有基本價格問題。即如果有人選擇少於24小時的差價,則價格降至15英鎊。任何維持25英鎊的最低**價格的方法? – Sam

1

我建議您使用momentJS。很容易使用。

var a = moment([2007, 0, 29]); 
var b = moment([2007, 0, 28]); 
a.diff(b, 'days') // 1 

或者僅僅是想that

var a = moment('2016-06-06T21:03:55');//now 
var b = moment('2016-05-06T20:03:55'); 

console.log(a.diff(b, 'minutes')) // 44700 
console.log(a.diff(b, 'hours')) // 745 
console.log(a.diff(b, 'days')) // 31 
console.log(a.diff(b, 'weeks')) // 4 

編輯:

添加一些想法。你可以簡單地使用@jeff的例子:

dt1 = new Date('2016-01-21 20:00:00'); 
dt2 = new Date('2016-01-24 09:00:00'); 
dif = dt2-dt1; 
dif = dif/(1000 * 60 * 60 * 24); 
days = Math.ceil(dif); 
var total = 0; 

if (days > 0) { 
    total = 25 + ((days-1) * 10) // total = <first day with prequote 25 and then others days are 10 bucks> 
} 
console.log(total); // total of amout to be paid 

也許thia可以解決你的問題。

+0

謝謝。我實際上設法通過添加一個等號來排序24小時問題:'if(h> = 0)'而不是'if(h> 0)** **但是**我仍然有基礎價格問題。即如果有人選擇少於24小時的差價,則價格降至15英鎊。任何維持25英鎊**最低**價格的方法? – Sam

+0

也許你可以使用@jeff(下面)的例子。 –

0

當某人租了不到24小時的房間。我的價值變得消極。從你的表情

prequote = prequote + (taxa * (i-2)); 

如果我是小於2類羣變量變爲負值,且必須得到價格小於25請使用以下行

i=(i<2)?i=2:i; 

從上述表達。你的價值不能低於25英鎊。希望它可以幫助你

+0

感謝這.. ..我會把這個代碼放在哪裏? 'i =(i <2)?i = 2:i;' – Sam

+0

就在這條線下面if(h> 0){i = i + 1; }' – Kumar