奇怪的错误在2011年10月29日至2011年10月31日,计算错误的夜晚

时间:2011-09-21 11:37:00

标签: jquery datepicker

我使用两个日期选择器来获取到达和离开日期,计算夜晚的天数,一切都很好,除了一件事:如果我把我的开始日期在29.10.2011和我的结束日期在31.10。 2011 jquery计算3晚,但只有2晚。只有在十月,其他一个月仍然工作正常,希望有人能帮我弄清楚我的错误在哪里:

var oneDay = 1000*60*60*24; 
var difference = Math.ceil((arrivalDate.getTime() - departureDate.getTime()) / oneDay); 

4 个答案:

答案 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月不应该搞砸了,因为它只减少了一个小时,所以如果我是正确的话,它仍然可以延长到24小时?

问候拉尔夫

答案 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"));