programing

오늘보다 3개월 전의 날짜를 자바스크립트로 계산하려면 어떻게 해야 하나요?

sourcejob 2022. 11. 24. 21:39
반응형

오늘보다 3개월 전의 날짜를 자바스크립트로 계산하려면 어떻게 해야 하나요?

저는 현재 날짜보다 3개월 빠른 날짜를 잡으려고 합니다.나는 아래 코드로 이번 달을 얻는다.

var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;

수 ?Date데이터 유형)은 월이 1월 (1)일 때 날짜 3개월 전이 OC Tober(10)인 것을 고려합니다.

var d = new Date();
d.setMonth(d.getMonth() - 3);

이것은 1월분부터 유효합니다.다음 스니펫을 실행합니다.

var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());


몇 가지 경고가 있습니다...

한 달은 신기한 일이다.1개월을 어떻게 정의하나요? 30일을 정의하나요?대부분의 사람들은 한 달 전은 전달의 같은 날을 의미한다고 말할 것이다. 그러나 그 절반 이상은 30일이 아니라 31일 전이다.그리고 오늘이 그 달의 31일(8월 또는 December가 아님)인 경우, 그 달의 그 날은 전달에 존재하지 않습니다.

흥미로운 것은 구글이 자바스크립트에 동의한다는 것이다.

'3월 31일 전 한 달'의 구글 검색 결과에는 '3월 3일'이 표시된다.

또한 1개월은 30.4167일이라고 되어 있습니다.'1개월 후'에 대한 구글 검색 결과는 '30.4167'로 표시됨

그럼 3월 31일 전 한 달과 3월 28일 전 한 달, 3일 전 같은 날인가요?이 모든 것은 "한 달 전"이 무엇을 의미하느냐에 달려 있습니다.제품 소유자와 대화를 나누십시오.

meamentjs와 같은 작업을 수행하고 해당 월의 마지막 날로 이동하여 해당 월의 마지막 날 오류를 수정하는 경우 다음과 같은 작업을 수행할 수 있습니다.

const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
    d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());

요구 사항이 그것보다 더 복잡할 경우, 약간의 계산을 사용하고 코드를 작성하십시오.당신은 개발자예요!라이브러리를 설치할 필요가 없습니다!stackoverflow에서 복사하여 붙여넣을 필요가 없습니다.코드를 직접 개발하여 필요한 작업을 정확하게 수행할 수 있습니다.

Moment.js라는 라이브러리를 사용하는 것을 추천합니다.

테스트 완료, 브라우저간 및 서버측에서 동작합니다(Angular 프로젝트와 Node 프로젝트 양쪽에서 사용하고 있습니다.로케일 날짜를 크게 지원합니다.

http://momentjs.com/

var threeMonthsAgo = moment().subtract(3, 'months');

console.log(threeMonthsAgo.format()); // 2015-10-13T09:37:35+02:00

.format()ISO 8601 형식으로 포맷된 날짜의 문자열 표현을 반환합니다.다음과 같은 커스텀 날짜 형식으로 사용할 수도 있습니다..format('dddd, MMMM Do YYYY, h:mm:ss a')

변수에 직접 넣을 수 있는 "하나의 라이너" (쉽게 읽을 수 있도록 여러 줄에 있음)

var oneMonthAgo = new Date(
    new Date().getFullYear(),
    new Date().getMonth() - 1, 
    new Date().getDate()
);

간단하게 하기 위해 JavaScript용 날짜 라이브러리인 DateJS를 사용할 수 있습니다.

http://www.datejs.com/

코드 예:

Date.today().add({ months: -1 });

이것은 덧셈/감산을 처리할 것입니다. 빼기 위해서는 음의 값을, 더하기 위해서는 양의 값을 넣기만 하면 됩니다.이것에 의해, 월간 크로스오버 문제도 해결됩니다.

function monthAdd(date, month) {
    var temp = date;
    temp = new Date(date.getFullYear(), date.getMonth(), 1);
    temp.setMonth(temp.getMonth() + (month + 1));
    temp.setDate(temp.getDate() - 1); 

    if (date.getDate() < temp.getDate()) { 
        temp.setDate(date.getDate()); 
    }

    return temp;    
}

경우,setMonthGilly3가 제공하는 방법은 고객이 원하는 방식이 아닙니다.이치노

var someDate = new Date(); // add arguments as needed
someDate.setTime(someDate.getTime() - 3*28*24*60*60);
// assumes the definition of "one month" to be "four weeks".

원하는 시간 동안 사용할 수 있습니다. 올바른 배수를 설정하기만 하면 됩니다.

이렇게 해 주세요.

 let currentdate = new Date();
 let last3months = new Date(currentdate.setMonth(currentdate.getMonth()-3));

의 JavascriptsetMonth을 사용하다를 들어, 위의 는 「」, 「」를 합니다.2020-01-29가 currentDate로 되어 있는 new Date("2020-01-29")

Gilly3의 간단한 답변은 마음에 들지만, 3월 31일 전 달이 3월 3일이라는 사실에 사용자들은 놀랄 것입니다.월말에 맞는 버전을 도입하기로 결정했기 때문에 3월 28일, 29일, 30일, 31일 전은 윤년이 아닌 2월 28일입니다.

function addMonths(date, months) {
  var result = new Date(date),
      expectedMonth = ((date.getMonth() + months) % 12 + 12) % 12;
  result.setMonth(result.getMonth() + months);
  if (result.getMonth() !== expectedMonth) {
    result.setDate(0);
  }
  return result;
}

var dt2004_05_31 = new Date("2004-05-31 0:00"),
    dt2001_05_31 = new Date("2001-05-31 0:00"),
    dt2001_03_31 = new Date("2001-03-31 0:00"),
    dt2001_02_28 = new Date("2001-02-28 0:00"),
    result = addMonths(dt2001_05_31, -2);
console.assert(dt2001_03_31.getTime() == result.getTime(), result.toDateString());

result = addMonths(dt2001_05_31, -3);
console.assert(dt2001_02_28.getTime() == result.getTime(), result.toDateString());

result = addMonths(dt2001_05_31, 36);
console.assert(dt2004_05_31.getTime() == result.getTime(), result.toDateString());

result = addMonths(dt2004_05_31, -38);
console.assert(dt2001_03_31.getTime() == result.getTime(), result.toDateString());

console.log('Done.');

var d = new Date("2013/01/01");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() + 18);
console.log(d.toLocaleDateString());

이미 우아한 답변이 있습니다만, 읽기 어렵다고 판단해, 독자적인 기능을 만들었습니다.제 목적을 위해 부정적인 결과는 필요 없었지만 수정하는 것은 어렵지 않을 것입니다.

    var subtractMonths = function (date1,date2) {
        if (date1-date2 <=0) {
            return 0;
        }
        var monthCount = 0;
        while (date1 > date2){
            monthCount++;
            date1.setMonth(date1.getMonth() -1);
        }
        return monthCount;
    }

이것은 가장 작고 쉬운 코드입니다.

   var minDate = new Date(); 
   minDate.setMonth(minDate.getMonth() - 3);

현재 날짜를 가진 변수를 선언합니다.set Month inbuilt 기능을 사용하는 것만으로 3개월 전 날짜를 얻을 수 있습니다.

오늘보다 3일 전의 날짜를 취득하는 경우:

let d = new Date(new Date().setMonth(new Date().getMonth() - 3))
console.log(d.toISOString().slice(0, 10))
// 2022-05-24 (today is 2022-08-24)

아직 제안하지 않은 것 같아서...

const d = new Date();
const day = d.getDate();
const goBack = 3;
for (let i = 0; i < goBack; i++) d.setDate(0);
d.setDate(day);

전 가 '3개월 전'으로 됩니다..setDate(0)는 월에 포함되는 일수에 관계없이 날짜를 지난달의 마지막 날로 설정합니다. day는 오늘의 날짜 값을 복원하는 데 사용됩니다.

d.setMonth 브라우저 시도에서 변경된 현지 시간

 const calcDate = (m) => {
    let date = new Date();
    let day = date.getDate();
    let month = date.getMonth() + 1;
    let year = date.getFullYear();
    let days = 0;

    if (m > 0) {
      for (let i = 1; i < m; i++) {
        month += 1;
        if (month > 12) {
          year += 1;
          month = 1;
        }
        days += new Date(year, month, 0).getDate();
      }
    } else {
      for (let i = m; i < 0; i++) {
        month -= 1;
        if (month < 1) {
          year -= 1;
          month = 12;
        }
        days -= new Date(year, month, 0).getDate();
      }
    }

    const newTime = date.getTime() + 3600 * 24 * 1000 * days;
    return new Date(newTime);
  };

calcDate(3)//+3 month

var todayDate = new Date().toISOString().slice(0, 10);
var d = new Date(todayDate);
d.setMonth(d.getMonth() -3);
console.log(todayDate)
console.log(d.toISOString().slice(0, 10));

「2월 31일」은 「3월 3일」이나 「3월 2일」로 자동 변환되기 때문에, 「3월 31일」을 한달 앞둔 시점에서, 나는 내 마음과 같이 하기로 했다.@Don Kirkby의 답변과 마찬가지로 날짜를 목표 달의 마지막 날로 수정합니다.

function nMonthsAgo(date, n) {
  // get the target year, month, date
  const y = date.getFullYear() - Math.trunc(n / 12) 
  const m = date.getMonth() - n % 12
  let d = date.getDate()
  if (d > 27) {   // get a valid date
    const lastDateofMonth = new Date(y, m + 1, 0).getDate()
    d = Math.min(d, lastDateofMonth) 
  }
  return new Date(y, m, d) 
}

d = new Date('2022-03-31')
nMonthsAgo(d, 1).toLocaleDateString()

마지막으로 @gilly3가 그의 대답에서 한 말이 마음에 듭니다.

요구 사항이 그것보다 더 복잡할 경우, 약간의 계산을 사용하고 코드를 작성하십시오.당신은 개발자예요!라이브러리를 설치할 필요가 없습니다!stackoverflow에서 복사하여 붙여넣을 필요가 없습니다.코드를 직접 개발하여 필요한 작업을 정확하게 수행할 수 있습니다.

for (let monthOfYear = 0; monthOfYear < 12; monthOfYear++) {
  const maxDate = new Date();
  const minDate = new Date();
  const max = maxDate.setMonth(maxDate.getMonth() - (monthOfYear - 1), 0);
  const min = maxDate.setMonth(minDate.getMonth() - (monthOfYear), 1);

  console.log('max: ', new Date(max));
  console.log('min: ', new Date(min));
}

저 같은 경우에는 현재 날짜로 1개월을 단축해야 했습니다.중요한 부분은 월 번호였기 때문에, 당신이 이번 달의 어느 요일에 있는지는 상관없습니다.지난 달에 필요했습니다.코드는 다음과 같습니다.

var dateObj = new Date('2017-03-30 00:00:00'); //Create new date object
console.log(dateObj); // Thu Mar 30 2017 00:00:00 GMT-0300 (ART)

dateObj.setDate(1); //Set first day of the month from current date
dateObj.setDate(-1); // Substract 1 day to the first day of the month

//Now, you are in the last month
console.log(dateObj); // Mon Feb 27 2017 00:00:00 GMT-0300 (ART)

1개월 후부터 실제 날짜까지가 정확하지 않기 때문에 첫 번째 날(어느 달의 첫 번째 날은 항상 첫 번째 날)로 설정하고 두 번째 날 1일 후부터는 항상 당신을 지난달로 보냅니다.널 도울 수 있길 바라.

var dateObj = new Date('2017-03-30 00:00:00'); //Create new date object
console.log(dateObj); // Thu Mar 30 2017 00:00:00 GMT-0300 (ART)

dateObj.setDate(1); //Set first day of the month from current date
dateObj.setDate(-1); // Substract 1 day to the first day of the month

//Now, you are in the last month
console.log(dateObj); // Mon Feb 27 2017 00:00:00 GMT-0300 (ART)

   

 var date=document.getElementById("date");
    var d = new Date();
   document.write(d + "<br/>");
    d.setMonth(d.getMonth() - 6);
    document.write(d);

 if(d<date)
  document.write("lesser then 6 months");
else
  document.write("greater then 6 months");

JS 날짜 개체와 추가/감산할 달의 정수를 전달합니다. monthsToAdd긍정적일 수도 있고 부정적일 수도 있습니다.JS 날짜 개체를 반환합니다.

만약 당신이originalDateObject3월 31일이고, 당신은 -1을 통과했습니다.monthsToAdd출력일은 2월 28일이 됩니다.

예를 들어 36개월이라는 많은 달이 지나면 연도 조정도 적절하게 처리됩니다.

const addMonthsToDate = (originalDateObject, monthsToAdd) => {
  const originalDay = originalDateObject.getUTCDate();
  const originalMonth = originalDateObject.getUTCMonth();
  const originalYear = originalDateObject.getUTCFullYear();

  const monthDayCountMap = {
    "0": 31,
    "1": 28,
    "2": 31,
    "3": 30,
    "4": 31,
    "5": 30,
    "6": 31,
    "7": 31,
    "8": 30,
    "9": 31,
    "10": 30,
    "11": 31
  };

  let newMonth;
  if (newMonth > -1) {
    newMonth = (((originalMonth + monthsToAdd) % 12)).toString();
  } else {
    const delta = (monthsToAdd * -1) % 12;
    newMonth = originalMonth - delta < 0 ? (12+originalMonth) - delta : originalMonth - delta;
  }

  let newDay;

  if (originalDay > monthDayCountMap[newMonth]) {
    newDay = monthDayCountMap[newMonth].toString();
  } else {
    newDay = originalDay.toString();
  }

  newMonth = (+newMonth + 1).toString();

  if (newMonth.length === 1) {
    newMonth = '0' + newMonth;
  }

  if (newDay.length === 1) {
    newDay = '0' + newDay;
  }

  if (monthsToAdd <= 0) {
    monthsToAdd -= 11;
  }

  let newYear = (~~((originalMonth + monthsToAdd) / 12)) + originalYear;

  let newTime = originalDateObject.toISOString().slice(10, 24);

  const newDateISOString = `${newYear}-${newMonth}-${newDay}${newTime}`;

  return new Date(newDateISOString);
};
Following code give me Just Previous Month From Current Month even the date is 31/30 of current date and last month is 30/29/28 days:

   <!DOCTYPE html>
<html>
<body>

<p>Click the button to display the date after changing the month.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
function myFunction() {

var d = new Date("March 29, 2017"); // Please Try the result also for "March 31, 2017" Or "March 30, 2017"
var OneMonthBefore =new Date(d);

OneMonthBefore.setMonth(d.getMonth(),0);
if(OneMonthBefore.getDate() < d.getDate()  )
{
d.setMonth(d.getMonth(),0);
}else
{
d.setMonth(d.getMonth()-1);

}

    document.getElementById("demo").innerHTML = d;
}
</script>

</body>
</html>

var d = new Date();
document.write(d + "<br/>");
d.setMonth(d.getMonth() - 6);
document.write(d);

언급URL : https://stackoverflow.com/questions/7937233/how-do-i-calculate-the-date-in-javascript-three-months-prior-to-today

반응형