Странная ошибка с 29.10.2011 по 31.10.2011 неправильный подсчет ночей - PullRequest
1 голос
/ 21 сентября 2011

Я использую два средства выбора даты, чтобы получить дату прибытия и отъезда, считая дни для количества ночей, все работает хорошо, за исключением одного: если я возьму свою начальную дату 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 ]

3 голосов
/ 21 сентября 2011

Проблема в том, что летнее время заканчивается в Европе 30 октября (где, судя по немецкому сообщению об ошибке, вы находитесь). В результате, если между датами обычно будет 24 + 24 + 24 = 72 часа, в этом случае между датами будет 24 + 24 + 24 + 1 = 73 часа. Таким образом, ваш код определяет, что между датами есть 2,041666 дней. Ваш Math.ceil затем округляет это до 3.

Самым простым решением в этом случае, вероятно, является просто замена Math.ceil на Math.round. Когда DST заканчивается, ваши 2,04166 дней будут округлены до 2 дней. Когда начинается летнее время, вы должны отработать 1,99534 дня, а затем округлить до 2 дней.

0 голосов
/ 21 сентября 2011

Следующее правильно сообщает о 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"));
0 голосов
/ 21 сентября 2011

Март не должен быть испорчен, потому что он всего на один час меньше, так что он все еще крутится до 24 часов, если я прав?

Привет Ральф

0 голосов
/ 21 сентября 2011

изменить:

var difference = Math.ceil((arrivalDate.getTime() - departureDate.getTime()) / oneDay); 

на:

var different = Math.Floor(arrivalDate.getTime() / oneDay) - Math.Floor(departureDate.getTime() / oneDay)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...