Javascript预订计算器不将24小时计算为一天

Javascript预订计算器不将24小时计算为一天,javascript,calculator,Javascript,Calculator,我使用JavaScript创建了一个按日期的预订计算器 基本上,我希望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(e

我使用JavaScript创建了一个按日期的预订计算器

基本上,我希望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.');
        }


 });
jQuery(文档).ready(函数($){
var prequote=25.00;
变种分类群=10.00;
var hoje=新日期();
hoje=hoje.getTime();
i=0;
$('#quote')。单击(函数(事件){
var d1=$('#d1').val();
var d2=$('#d2').val();
var t1=$('#t1').val();
var t2=$('#t2').val();
控制台日志(d1);
控制台日志(d2);
控制台日志(t1);
控制台日志(t2);
//end-start返回以毫秒为单位的差值
var date2=新日期(d2);
var date1=新日期(d1);
var毫秒Sperday=1000*60*60*24;
var millisBetween=date2.getTime()-date1.getTime();
//得到天
var d=中间毫秒/毫秒/天;
//警报(天数值为“+d”);
//警报(新日期(“1970-1-1”+t2)-新日期(“1970-1-1”+t1))/1000/60/60;
var h=(新日期(“1970-1-1”+t2)-新日期(“1970-1-1”+t1))/1000/60/60;
//警报(小时值为“+h”);
t1=t1.分裂(':');
t2=t2.分裂(“:”);
var dat1=d1.拆分(“-”);
var dd1=dat1[2];
var mm1=dat1[1];
变量yy1=dat1[0];
var hh1=t1[0];
var ms1=t1[1];
var dat2=d2.拆分(“-”);
var dd2=dat2[2];
var mm2=dat2[1];
var yy2=dat2[0];
var hh2=t2[0];
var ms2=t2[1];
变量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;
变量席=YY1+','+MM1+','+DD1;
var xj=yy2+','+mm2+','+dd2;
var开始=新日期(x1);
//var start_i=新日期(xi);
var结束=新日期(x2);
//var end_i=新日期(xj);
start=start.getTime();
end=end.getTime();
如果(开始==结束){
警报(“最低租赁天数为1”);
}
else if(开始<结束){
//hh1=parseInt(hh1);ms1=parseInt(ms1);hh2=parseInt(hh2);ms2=parseInt(ms2);;
/*while(开始\u i<结束\u i){
i++;
var newDate=start_i.setDate(start_i.getDate()+1);
开始i=新日期(newDate);
}*/
i=d;
如果(i>=1){
如果(h>0){
i=i+1;
}
预报价=预报价+(分类群*(i-2));
prequote=parseFloat(prequote.toFixed(2));
}    
$('en-tex')。文本(ent);
$('#ex-t')。文本(ext);
$('#prequote').html(prequote);
$('模态img')。模态('显示');
预报价=25.00;
$('tupd').val(ent);
$('#tdod').val(分机);
}
否则{
警报('请填写所有日期和时间字段');
}
});
第一个问题是,如果我选择例如星期一21日上午9:00到星期二22日上午9:00,则不将费用计算为24小时。仅当结束日期在上午9:00之后

同样地,对于更长的日期,它只在24小时后的一天收费,而不是从24小时开始


第二个问题是,如果有人选择的时间少于24小时(即星期一21日上午9:00到星期二22日上午7:00),那么它将从25英镑减去10英镑。我希望它仍然引用25英镑的基价。

因为你整天都在工作,你可以通过以下方式简化流程:

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);
days值包含两个日期之间天数的整数。请根据该值进行定价。

我建议您使用。使用起来非常简单

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

编辑。

添加一些想法。您只需使用@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
dt1=新日期('2016-01-21 20:00:00');
dt2=新日期('2016-01-24 09:00:00');
dif=dt2-dt1;
dif=dif/(1000*60*60*24);
天数=数学单元(dif);
var合计=0;
如果(天数>0){
总计=25+((第1天)*10)//总计=
}
console.log(总计);//待支付金额总计

也许thia可以解决你的问题。

当有人租了一个房间不到24小时。i的值变为负值。从你的表达式

prequote = prequote + (taxa * (i-2));
如果i小于2,则分类变量变为负值,并且您得到的价格小于25。请使用下面的行

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

i=(iI实际上通过添加一个等号来对24小时问题进行排序:
if(h>=0)
而不仅仅是
if(h>0)
但我仍然存在基本价格问题。即,如果有人选择的差价小于24小时,价格将下降到15英镑。有没有办法将最低价格维持在25英镑?var d=millissbetween/millissecondsPerday;
它会给你正确的结果,它会给出正确的结果。我实际上设法解决了24小时的问题通过添加等号:
if(h>=0)
而不是仅添加
if(h>0)
但我仍然存在基本价格问题。即,如果有人选择的差价小于24小时,价格将降至15英镑。有没有办法将最低价格维持在25英镑?谢谢。我实际上通过添加等号来解决24小时问题:
如果(h>=0)
而不是仅仅
如果(h>0)
但我仍然存在基本价格问题。例如,如果有人选择的差价小于24小时,价格将降至15英镑。有没有办法将最低价格维持在25英镑?也许你可以使用@jeff(下面)的例子。谢谢。我将把这个代码放在哪里?
i=(我只在这一行下方
if(h>0){i=i+1;}
i=(i<2)?i=2:i;