我使用两个日期选择器来获取到达和离开日期,计算夜晚的天数,一切都很好,除了一件事:如果我把我的开始日期在29.10.2011和我的结束日期在31.10。 2011 jquery计算3晚,但只有2晚。只有在十月,其他一个月仍然工作正常,希望有人能帮我弄清楚我的错误在哪里:
var oneDay = 1000*60*60*24;
var difference = Math.ceil((arrivalDate.getTime() - departureDate.getTime()) / oneDay);
答案 0 :(得分:3)
问题是夏令时在10月30日在欧洲结束(在那里,你会看到德语错误信息)。因此,在日期之间通常会有24 + 24 + 24 = 72小时,在这种情况下,日期之间有24 + 24 + 24 + 1 = 73小时。您的代码因此确定日期之间有2.041666天。您的Math.ceil
然后将其舍入为3。
在这种情况下,最简单的解决方案可能只是用Math.ceil
替换Math.round
。当DST结束时,您的2.04166天将四舍五入为2天。当夏令时开始时,您将在那里工作的1.95834天也将被舍入到2天。
答案 1 :(得分:0)
改变:
var difference = Math.ceil((arrivalDate.getTime() - departureDate.getTime()) / oneDay);
为:
var different = Math.Floor(arrivalDate.getTime() / oneDay) - Math.Floor(departureDate.getTime() / oneDay)
答案 2 :(得分:0)
问候拉尔夫
答案 3 :(得分:0)
以下正确报告2晚'或实际2天。
var startDate = new Date(2011,10,29);
var endDate = new Date(2011,10,31);
var oneDay = 1000*86400;
var difference = Math.ceil((endDate.getTime() - startDate.getTime())/oneDay);
alert(difference);
我怀疑问题出在Date对象的时间方面。您可以通过删除时间元素来“清理”输入。
function JustDate(inputDate) {
return new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());
}
var departureDate = JustDate(departure.datepicker("getDate"));
var arrivalDate = JustDate(arrival.datepicker("getDate"));