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英镑的基本价格。
既然你与整天工作,就可以通过简化流程:
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);
天数值包含了两个日期之间的天量的整数。从这个价值做你的定价。
我实际上设法通过添加一个等号来排序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可以解决你的问题。
谢谢。我实际上设法通过添加一个等号来排序24小时问题:'if(h> = 0)'而不是'if(h> 0)** **但是**我仍然有基础价格问题。即如果有人选择少于24小时的差价,则价格降至15英镑。任何维持25英镑**最低**价格的方法? – Sam
也许你可以使用@jeff(下面)的例子。 –
'var d = millisBetween/millisecondsPerDay;'它给你正确的结果 – Kumar
是的,它给出了正确的结果。我实际上设法通过添加一个等号来排序24小时问题:'if(h> = 0)'而不是'if(h> 0)** **但是**我仍然有基础价格问题。即如果有人选择少于24小时的差价,则价格降至15英镑。任何维持25英镑的最低**价格的方法? – Sam