Различие в Месяцах между двумя датами в JavaScript

Как я разработал бы различие для двух Дат () объекты в JavaScript, в то время как только возвращают число месяцев в различии?

Любая справка была бы большой :)

121
задан S.L. Barth - Reinstate Monica 20 July 2012 в 15:06
поделиться

2 ответа

Определение «количество месяцев в разнице» может быть интерпретировано множеством . : -)

Вы можете получить год, месяц и день месяца из объекта даты JavaScript. В зависимости от того, какую информацию вы ищете, вы можете использовать ее, чтобы выяснить, сколько месяцев проходит между двумя точками времени.

Например, автоматически это определяет, сколько полных месяцев лежит между двумя датами, не считая неполных месяцев (например, исключая месяц, в котором находится каждая дата):

function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;
    months -= d1.getMonth() + 1;
    months += d2.getMonth();
    return months <= 0 ? 0 : months;
}

monthDiff(
    new Date(2008, 10, 4), // November 4th, 2008
    new Date(2010, 2, 12)  // March 12th, 2010
);
// Result: 15: December 2008, all of 2009, and Jan & Feb 2010

monthDiff(
    new Date(2010, 0, 1),  // January 1st, 2010
    new Date(2010, 2, 12)  // March 12th, 2010
);
// Result: 1: February 2010 is the only full month between them

monthDiff(
    new Date(2010, 1, 1),  // February 1st, 2010
    new Date(2010, 2, 12)  // March 12th, 2010
);
// Result: 0: There are no *full* months between them

( Обратите внимание, что значения месяца в JavaScript начинаются с 0 = январь.)

Включение дробных месяцев в приведенное выше намного сложнее, потому что три дня в типичном феврале составляют большую часть этого месяца (~ 10,714%), чем три дня в Август (~ 9,677%), и, конечно, даже февраль - это подвижная цель в зависимости от того, високосный ли это год.

Есть также несколько библиотек даты и времени , доступных для JavaScript, которые, вероятно, упрощают подобные вещи.

214
ответ дан 24 November 2019 в 01:27
поделиться

Я знаю, что это очень поздно, но все равно размещаю это на всякий случай, вдруг это поможет другим. Вот функция, которую я придумал, которая, похоже, делает хорошую работу по подсчету разницы в месяцах между двумя датами. По общему признанию, она гораздо более грубая, чем функция мистера Краудера, но обеспечивает более точные результаты, проходя через объект даты. Он написан на AS3, но вы должны быть в состоянии просто отказаться от сильной типизации, и у вас будет JS. Не стесняйтесь сделать его красивее, чтобы он выглядел красиво!

    function countMonths ( startDate:Date, endDate:Date ):int
    {
        var stepDate:Date = new Date;
        stepDate.time = startDate.time;
        var monthCount:int;

        while( stepDate.time <= endDate.time ) { 
            stepDate.month += 1;
            monthCount += 1;
        }           

        if ( stepDate != endDate ) { 
            monthCount -= 1;
        }

        return monthCount;
    }
6
ответ дан 24 November 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: