Javascript预订计算器不计算24小时为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

既然你与整天工作,就可以通过简化流程:

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

我建议您使用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(下面)的例子。 –

当某人租了不到24小时的房间。我的价值变得消极。从你的表情

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

如果我是小于2类群变量变为负值,且必须得到价格小于25请使用以下行

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

从上述表达。你的价值不能低于25英镑。希望它可以帮助你

+0

感谢这.. ..我会把这个代码放在哪里? 'i =(i Sam

+0

就在这条线下面if(h> 0){i = i + 1; }' – Kumar