2012-01-05 6 views
1
function parseDate(s){ 
    var parts = s.split('/') 
    return new Date(parts[2], parts[1], parts[0]) 
} 

function calcDaysBetween(startDate, endDate){ 
    return Math.floor((endDate-startDate)/86400000); 
} 

function yarro(){ 
    var startDate = parseDate($('#pickupdate').val()); 
    var endDate = parseDate($('#dropoffdate').val()); 
    var days = calcDaysBetween(startDate, endDate); 
    $('#newp').html('Days Count: <b>'+days); 
} 

31/3/2012, 1/4/2012
дней Кол-во: 0 // неверноРазница во времени неправильный расчет

или

31/1/2012 , 1/2/2012
Количество дней: -1 // неправильное


1/1/2012, 2/1/2012
дней Кол-во: 1 // нормально

Почему?

+3

Месяцы начинаются с '0'. См. Https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date –

+0

Месяцы в JavaScript 'Date()' нумеруются от '0' (январь) до' 11' (декабрь). Запомни. – Tadeck

+0

так, как это исправить? –

ответ

3

Зная, что месяцы JS составляют 0, очень важно. Ваш код анализирует дату 31/1/2012 по 31 Февраль 2012, что является технически недействительной датой, но интерпретируется как 2 марта 2012 года (2-й, поскольку 2012 год - високосный год). Что вам нужно сделать, это вычесть 1 из значения parts[1] перед передачей его в конструктор Date.

Вы получаете -1 дней между 31/1/2012 и 1/2/2012, потому что эти даты интерпретируются как 31 февраля 2012 года (2 марта 2012 года) и 1 марта 2012 года. Когда вы вычитаете эти даты, вы получаете -1-дневная разница.

Вы получаете 0 дней между 31/3/2012 и 1/4/2012, потому что эти даты интерпретируются как 31 апреля 2012 года (1 мая 2012 года) и 1 мая 2012 года, которые являются одной и той же датой, в результате чего 0 -дневная разница.

Вы получаете 1 день между 01.01.2012 и 2/1/2012, потому что эти даты интерпретируются как 1 февраля 2012 года и 2 февраля 2012 года, что приводит к разнице в 1 день.

Смежные вопросы