Разница в месяц в JavaScript - PullRequest
11 голосов
/ 30 ноября 2010

Как рассчитать разницу в месяцах в 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

Ответы [ 4 ]

20 голосов
/ 30 ноября 2010
DisplayTo.getMonth() - DisplayFrom.getMonth() + (12 * (DisplayTo.getFullYear() - DisplayFrom.getFullYear())));

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

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

5 голосов
/ 30 ноября 2010

[ 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 голосов
/ 03 января 2013

На сайте нашел следующее 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;

1 голос
/ 29 сентября 2015
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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...