Разница в 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
}