JavaScript에서 두 날짜의 월 차이


135

JavaScript에서 두 Date () 객체의 차이를 어떻게 해결하고 차이의 개월 수 만 반환합니까?

어떤 도움이라도 좋을 것입니다 :)


월의 길이는 월에 따라 달라지기 때문에 월은 매우 정확한 측정 단위가 아닙니다. 간격이 1 월과 2 월 사이에 30 일 지속되는 경우 31 일 월로 생각하면 1 개월 미만이지만 2 월 28 일 또는 29 일을 고려하면 1 개월 이상입니다.
Mark Byers

7
잘 정의되지 않은 질문입니다. 2 월 28 일 23:58에서 3 월 1 일 00:01은 한 달입니까? 아니면 하루 만? 아니면 불과 3 분? 아니면 세 사람?
Thilo

1
@Thilo 관리자가 처음에 무엇을 요구하는지 모르기 때문에이를 구현해야하는 사람은 아마 답을 얻지 못할 것입니다. :)
AlbertEngelB

답변:


228

"차이의 개월 수"에 대한 정의는 많은 해석이 필요합니다. :-)

JavaScript 날짜 객체에서 년, 월 및 일을 얻을 수 있습니다. 찾고있는 정보에 따라 두 시점 사이에 몇 개월이 있는지 파악할 수 있습니다.

예를 들어, 커프 외 :

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

JavaScript의 월 값은 0 = 1 월로 시작합니다.

전형적인 2 월의 3 일은 8 월의 3 일 (~ 9.677 %)보다 3 월 (~ 10.714 %)의 큰 비율이며, 물론 2 월도 움직이는 목표이기 때문에 위의 분수를 포함하는 것은 훨씬 더 복잡합니다. 윤년인지에 따라.

JavaScript에 사용할 수있는 일부 날짜 및 시간 라이브러리 도 있으므로 이러한 종류의 작업을 쉽게 수행 할 수 있습니다.


참고 : + 1위의 예는 다음과 같습니다.

months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth() + 1;
// −−−−−−−−−−−−−−−−−−−−^^^^
months += d2.getMonth();

원래 내가 말한 것이기 때문입니다.

... 이는 두 사이에 몇 개월이 몇 달인 지를 알아 내며 , 부분 달은 계산하지 않습니다 (예 : 각 날짜가있는 달 제외).

두 가지 이유로 제거했습니다.

  1. 부분 개월을 세지 않으면 대답에 오는 많은 (대부분의) 사람들이 아닌 것으로 판명되었으므로 분리해야한다고 생각했습니다.

  2. 그 정의조차도 항상 작동하지는 않았습니다. :-D (죄송합니다.)


82

월의 날짜를 고려하지 않으면 훨씬 간단한 솔루션입니다.

function monthDiff(dateFrom, dateTo) {
 return dateTo.getMonth() - dateFrom.getMonth() + 
   (12 * (dateTo.getFullYear() - dateFrom.getFullYear()))
}


//examples
console.log(monthDiff(new Date(2000, 01), new Date(2000, 02))) // 1
console.log(monthDiff(new Date(1999, 02), new Date(2000, 02))) // 12 full year
console.log(monthDiff(new Date(2009, 11), new Date(2010, 0))) // 1

월 인덱스는 0부터 시작합니다. 이것은 January = 0및을 의미합니다 December = 11.


11
이것은 지금까지 본 코드 중 가장 짧고 이해하기 쉬운 코드입니다!
Omar

매달 시작한다는 사실을 제외하고는 이것으로 복잡한 것은 없습니다. 2011 년 3 월 31 일-> 01/05/2011은 2011 년 1 월 3 일-> 31/05/2011뿐만 아니라 2 개월이 될 것이지만 정확히 3이되어야합니다.
Natim

당신이 개월의 수를 알고 싶다면이 하나는 완벽합니다 !!!! 해당 월의 일을 기준으로 알아야 할 경우 작동하지 않습니다.
OSDM

1
2018/01과 2017/01이 12 개월 간격이라는 사실부터 시작하십시오. 거기에서 거꾸로 일하십시오. 이 대답은 그것을 얻는다. ;)
Gerard ONeill 2016 년

1
감사! 이 기능은 저에게 매우 유용합니다
Trương Long

29

때로는 하루 부분을 완전히 무시하고 두 날짜 사이의 월 수량 만 가져오고 싶을 수도 있습니다. 예를 들어 2013/06/21 및 2013/10/18의 두 날짜가 있고 2013/06 및 2013/10 부분에만 관심이있는 경우 시나리오 및 가능한 솔루션은 다음과 같습니다.

var date1=new Date(2013,5,21);//Remember, months are 0 based in JS
var date2=new Date(2013,9,18);
var year1=date1.getFullYear();
var year2=date2.getFullYear();
var month1=date1.getMonth();
var month2=date2.getMonth();
if(month1===0){ //Have to take into account
  month1++;
  month2++;
}
var numberOfMonths; 

1. month1과 month2를 제외한 두 날짜 사이의 월 수만 원하는 경우

numberOfMonths = (year2 - year1) * 12 + (month2 - month1) - 1;

2. 달 중 하나를 포함하려면

numberOfMonths = (year2 - year1) * 12 + (month2 - month1);

3. 두 달을 모두 포함하려면

numberOfMonths = (year2 - year1) * 12 + (month2 - month1) + 1;

좋은 것! 나를 위해 완벽하게 일했습니다.

3
마지막으로, 나는 추천 할 것이다 : numberOfMonths=(year2-year1)*12+(month2-month1)+1;그것은 똑같이하지만 의미 론적으로 나에게 더 정확하다
Natim

예, 더 멋지고 우아한 접근 방식입니다.
Mikayil Abdullayev

이것이 가장 좋은 대답이었습니다. 감사!
marienke

이것은 간단하고 깨끗합니다. 훌륭한 코드를 작성해 주셔서 감사합니다.
0과 1

28

다음은 두 날짜 사이의 월 수를 정확하게 제공하는 함수입니다.
기본 동작은 전체 개월 만 계산합니다. 예를 들어 3 개월과 1 일은 3 개월의 차이를 가져옵니다. roundUpFractionalMonthsparam을로 설정하면이를 방지 할 수 true있으므로 3 개월과 1 일 차이는 4 개월로 반환됩니다.

위의 허용 된 답변 (TJ Crowder 's answer)은 정확하지 않으며 때로는 잘못된 값을 반환합니다.

예를 들어, 분명히 잘못된 것을 monthDiff(new Date('Jul 01, 2015'), new Date('Aug 05, 2015'))반환합니다 0. 정확한 차이는 1 개월 또는 2 개월입니다.

내가 쓴 기능은 다음과 같습니다.

function getMonthsBetween(date1,date2,roundUpFractionalMonths)
{
    //Months will be calculated between start and end dates.
    //Make sure start date is less than end date.
    //But remember if the difference should be negative.
    var startDate=date1;
    var endDate=date2;
    var inverse=false;
    if(date1>date2)
    {
        startDate=date2;
        endDate=date1;
        inverse=true;
    }

    //Calculate the differences between the start and end dates
    var yearsDifference=endDate.getFullYear()-startDate.getFullYear();
    var monthsDifference=endDate.getMonth()-startDate.getMonth();
    var daysDifference=endDate.getDate()-startDate.getDate();

    var monthCorrection=0;
    //If roundUpFractionalMonths is true, check if an extra month needs to be added from rounding up.
    //The difference is done by ceiling (round up), e.g. 3 months and 1 day will be 4 months.
    if(roundUpFractionalMonths===true && daysDifference>0)
    {
        monthCorrection=1;
    }
    //If the day difference between the 2 months is negative, the last month is not a whole month.
    else if(roundUpFractionalMonths!==true && daysDifference<0)
    {
        monthCorrection=-1;
    }

    return (inverse?-1:1)*(yearsDifference*12+monthsDifference+monthCorrection);
};

6
진지하게 누가이 투표에 참여 했습니까? 그는 옳습니다. 받아 들여진 대답은 ... 잘못입니다.
Michael Blackburn

2
이것이 가장 적합한 답변입니다.
Kalyan Chavali

date1이 1 월 22 일이고 date2가 8 월 22 일이라고 말하면 이것이 맞지 않습니다. 그런 다음 7을 반환합니다. 이는 분명히 8이어야합니까?
Nicolai Harbo

이 대답을 받아들이십시오. 이것은 허용되는 것보다 정확합니다. 예를 들어 허용 된 답변이 일을 계산하지 않음
Munkhdelger Tumenbayar

크라우 더의 답변이 업데이트되었습니다. 이 답변과이 답변 사이에는 여전히 중요한 차이점이있을 수 있지만이 글을 쓰는 시점에서 여기에 나열된 관심사가 해결되었습니다.
clozach

23

28, 29, 30 또는 31 일인 달에 관계없이 전체 월을 계산해야하는 경우 아래가 작동합니다.

var months = to.getMonth() - from.getMonth() 
    + (12 * (to.getFullYear() - from.getFullYear()));

if(to.getDate() < from.getDate()){
    months--;
}
return months;

이것은 답변의 확장 버전입니다 https : //.com/a/4312956/1987208 이지만 1 월 31 일에서 2 월 1 일 (1 일)까지 1 개월로 계산되는 경우를 수정합니다.

이것은 다음을 다룰 것이다;

  • 1 월 1 일 ~ 1 월 31 일 ---> 30 일 --->은 0이됩니다 (1 개월이 아니기 때문에 논리적 임).
  • 2 월 1 일 ~ 3 월 1 일 ---> 28 또는 29 일 ---> 1 (결과는 1 개월이므로 논리)
  • 2 월 15 일 ~ 3 월 15 일 ---> 28 또는 29 일 ---> 1 (결과는 한 달이 지났으므로 논리)
  • 1 월 31 일 ~ 2 월 1 일 ---> 1 일 ---> 결과는 0입니다 (분명하지만 1 개월 후 게시물에 언급 된 답변).

2
그쪽은 내가 확인을 위해 여기에 왔다고 생각했는데 그것이 나에게 맞는 유일한 대답입니다
Andreas

2
월이 더 짧은 두 달을 비교할 때는 작동하지 않습니다. 예를 들어 3 월 31 일부터 4 월 30 일까지입니다. 4 월 이 전부 이므로 답은 "1"이어야합니다.
Michael Blackburn

7

JavaScript에서 두 날짜의 월 차이 :

 start_date = new Date(year, month, day); //Create start date object by passing appropiate argument
 end_date = new Date(new Date(year, month, day)

start_date와 end_date 사이의 총 개월 :

 total_months = (end_date.getFullYear() - start_date.getFullYear())*12 + (end_date.getMonth() - start_date.getMonth())

6

나는 이것이 정말로 늦다는 것을 알고 있지만 어쨌든 다른 사람들을 돕기 위해 게시하는 것입니다. 다음은 두 날짜 사이의 월 차이를 계산하는 데 도움이되는 기능입니다. 그것은 Mr.Crowder 's에 비해 상당히 야만적이지만 날짜 개체를 단계별로 수행하여보다 정확한 결과를 제공합니다. 그것은 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;
    }

이것은 대부분의 상황에서 가장 올바른 방법입니다. 달력에는 예외와 결점이 너무 많으므로 가장 좋은 방법은 Date ()와 같이 잘 테스트 된 라이브러리에 처리를 위임하는 것입니다. 대부분의 (짧은) 범위의 경우 계산 된 접근 방식과 동일한 대답을 반환하지만 긴 기간 (윤년, 윤년, 윤년, 윤년 포함)을 다룰 때 초 등을 제외하면 월을 빼고 년을 더하는 것이 잘못된 예외가 발생할 가능성이 큽니다. 계산이 가장 좋은 예외는 내 대답을 참조하십시오.
Michael Blackburn

5

각 날짜를 월 단위로 고려한 다음 빼서 차이를 찾으십시오.

var past_date = new Date('11/1/2014');
var current_date = new Date();

var difference = (current_date.getFullYear()*12 + current_date.getMonth()) - (past_date.getFullYear()*12 + past_date.getMonth());

이렇게하면 날짜를 무시하고 두 날짜 사이의 월 차이를 얻을 수 있습니다.


4

@TJ의 대답을 확장하기 위해 달력 개월이 아닌 간단한 달을 찾고 있다면 d2의 날짜가 d1보다 크거나 같은지 확인할 수 있습니다. 즉, d2가 해당 달에 비해 d2가 그 달에 늦으면 1 개월이 더 있습니다. 그래서 당신은 이것을 할 수 있어야합니다 :

function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;
    months -= d1.getMonth() + 1;
    months += d2.getMonth();
    // edit: increment months if d2 comes later in its month than d1 in its month
    if (d2.getDate() >= d1.getDate())
        months++
    // end edit
    return months <= 0 ? 0 : months;
}

monthDiff(
    new Date(2008, 10, 4), // November 4th, 2008
    new Date(2010, 2, 12)  // March 12th, 2010
);
// Result: 16; 4 Nov – 4 Dec '08, 4 Dec '08 – 4 Dec '09, 4 Dec '09 – 4 March '10

이는 시간 문제 (예 : 3 월 3 일 오후 4시 4시 및 4 월 3 일 오후 3시)를 완전히 설명하지는 않지만보다 정확하고 몇 줄의 코드 만 있으면됩니다.


4

수학 및 빠른 두 가지 접근 방식이 있지만 달력의 변동성 또는 반복적 및 느린 방식이 있지만 모든 이상을 처리합니다 (적어도 테스트를 거친 라이브러리에 처리하는 델리게이트).

캘린더를 반복하면 시작 날짜가 1 개월 씩 증가하고 종료 날짜가 지 났는지 확인합니다. 이 대표는 내장 된 날짜 () 클래스에 이상 처리하지만, 느린 될 수 있습니다 경우 당신이 날짜의 많은 수의이 일을하고 있습니다. 제임스의 대답은이 방법을 사용합니다. 아이디어가 마음에 들지 않는 한 이것이 "가장 안전한"접근 방식이라고 생각합니다. 하나의 계산 만 수행 하면 성능 차이는 무시할 수 있습니다. 우리는 한 번만 수행되는 작업을 과도하게 최적화하려는 경향이 있습니다.

이제 데이터 집합에서이 함수를 계산하는 경우 각 행에서 해당 함수를 실행하지 않으려 고 할 수도 있습니다 (또는 레코드 당 여러 번 금지). 이 경우, 당신은 여기에 다른 답변의 거의 모든 사용할 수 있습니다 제외 (차이 사이에 단지 잘못 허용 대답, new Date()그리고 new Date()-1)?

다음은 달 길이와 윤년이 다른 수학 및 빠른 접근 방식에 대한 설명입니다. 이것을 데이터 세트에 적용 할 경우 (이 계산을 반복해서 수행하는 경우) 이와 같은 함수 만 사용해야합니다. 한 번만 수행 해야하는 경우 Date () 객체에 대한 모든 (많은) 예외 처리를 위임하는 위의 James 반복 접근 방식을 사용하십시오.

function diffInMonths(from, to){
    var months = to.getMonth() - from.getMonth() + (12 * (to.getFullYear() - from.getFullYear()));

    if(to.getDate() < from.getDate()){
        var newFrom = new Date(to.getFullYear(),to.getMonth(),from.getDate());
        if (to < newFrom  && to.getMonth() == newFrom.getMonth() && to.getYear() %4 != 0){
            months--;
        }
    }

    return months;
}

3

덜 반복적 인 다른 접근 방식은 다음과 같습니다 .

calculateTotalMonthsDifference = function(firstDate, secondDate) {
        var fm = firstDate.getMonth();
        var fy = firstDate.getFullYear();
        var sm = secondDate.getMonth();
        var sy = secondDate.getFullYear();
        var months = Math.abs(((fy - sy) * 12) + fm - sm);
        var firstBefore = firstDate > secondDate;
        firstDate.setFullYear(sy);
        firstDate.setMonth(sm);
        firstBefore ? firstDate < secondDate ? months-- : "" : secondDate < firstDate ? months-- : "";
        return months;
}

1
이 방법에주의하십시오 : 그것은 (당신이 그것을주의 깊게 읽을 때 분명히) 호출자에게 다시 전달되는 첫 번째 날짜를 변경합니다 (날짜가 참조로 전달됨).
Andiih

3

이 솔루션을 고려할 수도 있습니다. function이는 월차를 정수 또는 숫자로 반환합니다.

시작 날짜 를 첫 번째 또는 마지막으로 전달하면 param내결함성이 있습니다. 즉, 함수는 여전히 동일한 값을 반환합니다.

const diffInMonths = (end, start) => {
   var timeDiff = Math.abs(end.getTime() - start.getTime());
   return Math.round(timeDiff / (2e3 * 3600 * 365.25));
}

const result = diffInMonths(new Date(2015, 3, 28), new Date(2010, 1, 25));

// shows month difference as integer/number
console.log(result);


당신은 다중 365.25에 의해 계정으로 윤년 걸릴한다
darryn.ten

2

두 날짜 사이의 차이는 월의 일부 (일)를 포함하여 계산합니다.


var difference = (date2.getDate() - date1.getDate()) / 30 +
    date2.getMonth() - date1.getMonth() +
    (12 * (date2.getFullYear() - date1.getFullYear()));

예 :
date1 : 24/09/2015 (2015 년 9 월 24 일)
date2 : 09/11/2015 (2015 년 11 월 9 일)
차이 : 2.5 (개월)


2

이것은 잘 작동합니다 :

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

1
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);
}

1

다음 코드는 부분 월의 nr 일을 고려하여 두 날짜 사이의 전체 월을 반환합니다.

var monthDiff = function(d1, d2) {
  if( d2 < d1 ) { 
    var dTmp = d2;
    d2 = d1;
    d1 = dTmp;
  }

  var months = (d2.getFullYear() - d1.getFullYear()) * 12;
  months -= d1.getMonth() + 1;
  months += d2.getMonth();

  if( d1.getDate() <= d2.getDate() ) months += 1;

  return months;
}

monthDiff(new Date(2015, 01, 20), new Date(2015, 02, 20))
> 1

monthDiff(new Date(2015, 01, 20), new Date(2015, 02, 19))
> 0

monthDiff(new Date(2015, 01, 20), new Date(2015, 01, 22))
> 0

1
function monthDiff(d1, d2) {
var months, d1day, d2day, d1new, d2new, diffdate,d2month,d2year,d1maxday,d2maxday;
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth() + 1;
months += d2.getMonth();
months = (months <= 0 ? 0 : months);
d1day = d1.getDate();
d2day = d2.getDate();
if(d1day > d2day)
{
    d2month = d2.getMonth();
    d2year = d2.getFullYear();
    d1new = new Date(d2year, d2month-1, d1day,0,0,0,0);
    var timeDiff = Math.abs(d2.getTime() - d1new.getTime());
          diffdate = Math.abs(Math.ceil(timeDiff / (1000 * 3600 * 24))); 
    d1new = new Date(d2year, d2month, 1,0,0,0,0);
    d1new.setDate(d1new.getDate()-1);
    d1maxday = d1new.getDate();
    months += diffdate / d1maxday;
}
else
{
      if(!(d1.getMonth() == d2.getMonth() && d1.getFullYear() == d2.getFullYear()))
    {
        months += 1;
    }
    diffdate = d2day - d1day + 1;
    d2month = d2.getMonth();
    d2year = d2.getFullYear();
    d2new = new Date(d2year, d2month + 1, 1, 0, 0, 0, 0);
    d2new.setDate(d2new.getDate()-1);
    d2maxday = d2new.getDate();
    months += diffdate / d2maxday;
}

return months;

}


1

아래의 논리는 달의 차이를 가져올 것입니다

(endDate.getFullYear()*12+endDate.getMonth())-(startDate.getFullYear()*12+startDate.getMonth())

1
function monthDiff(date1, date2, countDays) {

  countDays = (typeof countDays !== 'undefined') ?  countDays : false;

  if (!date1 || !date2) {
    return 0;
  }

  let bigDate = date1;
  let smallDate = date2;

  if (date1 < date2) {
    bigDate = date2;
    smallDate = date1;
  }

  let monthsCount = (bigDate.getFullYear() - smallDate.getFullYear()) * 12 + (bigDate.getMonth() - smallDate.getMonth());

  if (countDays && bigDate.getDate() < smallDate.getDate()) {
    --monthsCount;
  }

  return monthsCount;
}

0

내가 사용하는 것을보십시오 :

function monthDiff() {
    var startdate = Date.parseExact($("#startingDate").val(), "dd/MM/yyyy");
    var enddate = Date.parseExact($("#endingDate").val(), "dd/MM/yyyy");
    var months = 0;
    while (startdate < enddate) {
        if (startdate.getMonth() === 1 && startdate.getDate() === 28) {
            months++;
            startdate.addMonths(1);
            startdate.addDays(2);
        } else {
            months++;
            startdate.addMonths(1);
        }
    }
    return months;
}

0

또한 일 수를 세고 몇 개월 단위로 변환합니다.

function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;   //calculates months between two years
    months -= d1.getMonth() + 1; 
    months += d2.getMonth();  //calculates number of complete months between two months
    day1 = 30-d1.getDate();  
    day2 = day1 + d2.getDate();
    months += parseInt(day2/30);  //calculates no of complete months lie between two dates
    return months <= 0 ? 0 : months;
}

monthDiff(
    new Date(2017, 8, 8), // Aug 8th, 2017    (d1)
    new Date(2017, 12, 12)  // Dec 12th, 2017   (d2)
);
//return value will be 4 months 

작동 방식에 대한 자세한 설명을 추가 할 수 있습니까? 이것은 더 나은 답변을 만들 것입니다
serge1peshcoff

개월에 30 일이 있다고 가정합니까?
벤 탈리아도 로스

0

요일과 시간이 중요하지 않은 월 수

이 경우, 나는 전체 개월, 일부 개월, 한 달의 길이 등을 걱정하지 않습니다. 나는 단지 개월 수를 알아야합니다. 실제 사례는 매월 보고서를 제출해야하는 곳이며 보고서가 몇 개인 지 알아야합니다.

예:

  • 1 월 = 1 개월
  • 1 월-2 월 = 2 개월
  • 11 월-1 월 = 3 개월

이것은 숫자가 어디로 가는지를 보여주는 정교한 코드 예제입니다.

4 개월이 걸리는 2 개의 타임 스탬프를 보자

  • 2019 년 11 월 13 일 타임 스탬프 : 1573621200000
  • 2020 년 2 월 20 일 타임 스탬프 : 1582261140000

시간대 / 시간에 따라 약간 다를 수 있습니다. 날짜, 분 및 초는 중요하지 않으며 타임 스탬프에 포함될 수 있지만 실제 계산에서는 무시합니다.

1 단계 : 타임 스탬프를 JavaScript 날짜로 변환

let dateRangeStartConverted = new Date(1573621200000);
let dateRangeEndConverted = new Date(1582261140000);

2 단계 : 월 / 년 동안 정수 값 얻기

let startingMonth = dateRangeStartConverted.getMonth();
let startingYear = dateRangeStartConverted.getFullYear();
let endingMonth = dateRangeEndConverted.getMonth();
let endingYear = dateRangeEndConverted.getFullYear();

이것은 우리에게

  • 시작 월 : 11
  • 시작 년도 : 2019
  • 끝나는 달 : 2
  • 연말 : 2020

3 단계 : (12 * (endYear - startYear)) + 1종료 월에 추가 합니다.

  • 이로 인해 첫 달은 11시에 머무 릅니다.
  • 이것은 우리의 결말 달을 15로 만듭니다 2 + (12 * (2020 - 2019)) + 1 = 15

4 단계 : 월 빼기

15 - 11 = 4; 4 개월 결과를 얻습니다.

29 개월 예

2019 년 11 월부터 2022 년 3 월까지는 29 개월입니다. 이것을 Excel 스프레드 시트에 넣으면 29 개의 행이 표시됩니다.

  • 우리의 시작 달은 11
  • 우리의 결말은 40입니다 3 + (12 * (2022-2019)) + 1

40-11 = 29


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

3
이 코드 스 니펫이 해결책이 될 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자들에게 질문에 대한 답변을 제공하므로 해당 사람들이 코드 제안의 이유를 모를 수도 있습니다.
유진 포드 칼

답변에 설명되거나 정의되지 않은 기능에 의존하는 답변을 게시하는 것은별로 유용하지 않습니다.
RobG

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.