오늘보다 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가 아님)인 경우, 그 달의 그 날은 전달에 존재하지 않습니다.
흥미로운 것은 구글이 자바스크립트에 동의한다는 것이다.

또한 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 프로젝트 양쪽에서 사용하고 있습니다.로케일 날짜를 크게 지원합니다.
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를 사용할 수 있습니다.
코드 예:
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
'programing' 카테고리의 다른 글
| JS 어레이에서 중복된 값 제거 (0) | 2022.11.24 |
|---|---|
| Vuex 스토어는 Nuxt 어디에 있습니까? (0) | 2022.11.24 |
| pip을 사용하여 특정 패키지 버전 설치 (0) | 2022.11.24 |
| Amazon EC2, InnoDB: mmap(x바이트) 실패, errno 12로 인한 mysql 중단 시작 (0) | 2022.11.24 |
| Java에서의 GPGPU/CUDA/OpenCL에 대한 최선의 접근법 (0) | 2022.11.24 |