Разница в Javascript

Как рассчитать разницу в месяцах в Javascript?

Обратите внимание, что есть похожие вопросы, такие как: Каков наилучший способ расчета разницы дат в Javascript

Но они основаны на различии MS, когда несколько месяцев имеют разное количество дней, чем другие!

Любой простой способ рассчитать разницу в месяц между двумя датами?

Чтобы быть ясным, мне нужно знать, сколько месяцев охватывают даты, например:

Jan 29th 2010, and Feb 1st 2010 = 2 months
Jan 1st 2010, and Jan 2nd 2010 = 1 month
Feb 14th 2010, Feb 1st 2011 = 13 months
Feb 1st 2010, March 30th 2011 = 14 months

Ответ 1

DisplayTo.getMonth() - DisplayFrom.getMonth() + (12 * (DisplayTo.getFullYear() - DisplayFrom.getFullYear())));

getMonth минус getMonth дает вам разницу в месяце между датами в два месяца.

Затем мы умножаем 12 на количество различий в годах и добавим это к результату, дающему нам полный месяц.

Ответ 2

[ edit] Основываясь на комментарии, я исправляю. Используя принятый ответ, я использовал бы что-то вроде:

var  datefrom = new Date('2001/03/15')
    ,dateto = new Date('2011/07/21')
    ,nocando = datefrom<dateto ? null : 'datefrom > dateto!'
    ,diffM = nocando || 
             dateto.getMonth() - datefrom.getMonth() 
              + (12 * (dateto.getFullYear() - datefrom.getFullYear()))
    ,diffY = nocando || Math.floor(diffM/12)
    ,diffD = dateto.getDate()-datefrom.getDate()
    ,diffYM = nocando || 
               (diffY>0 ? ' Year(s) ' : '')
               + diffM%12+' Month(s) '+(diffD>0? (diffD+' day(s)') : '') ;

 console.log(diffYM); //=> 10 Year(s) 4 Month(s) 6 day(s)

Ответ 3

Я нашел следующее на веб-сайте http://ditio.net/2010/05/02/javascript-date-difference-calculation/:

inMonths: function(d1, d2) {
        var d1Y = d1.getFullYear();
        var d2Y = d2.getFullYear();
        var d1M = d1.getMonth();
        var d2M = d2.getMonth();

        return (d2M+12*d2Y)-(d1M+12*d1Y);
    }

В вашем случае, поскольку вы хотите включить все месяцы в диапазон дат, я бы просто изменил приведенный выше код, добавив 1 к нему: return (d2M+12*d2Y)-(d1M+12*d1Y) + 1;

Ответ 4

function calcualteMonthYr(){
    var fromDate =new Date($('#txtDurationFrom2').val()); // Date picker (text fields)
    var toDate = new Date($('#txtDurationTo2').val());
    var months=0;
        months = (toDate.getFullYear() - fromDate.getFullYear()) * 12;
        months -= fromDate.getMonth();
        months += toDate.getMonth();
            if (toDate.getDate() < fromDate.getDate()){
                months--;
            }
    $('#txtTimePeriod2').val(months); // result
}