new Date()
를 이용하면 오늘 날짜를 쉽게 구할 수 있다!
const today = new Date()
// console.log(today)
// Tue Mar 29 2022 13:47:37 GMT+0900 (한국 표준시)
한달 전 날짜를 구하기 위해서는 setMonth()
와 getMonth()
를 이용해서 작성하면 된다!
이때 new Date().getMonth()
를 구하면 현재의 달이 나오게 되므로 한달 전 날짜를 구하기 위해서는 -1
을 해주면 구할 수 있다!
const today = new Date();
const monthAgo = new Date(today);
monthAgo.setMonth(today.getMonth() - 1);
// console.log(monthAgo)
// Tue Mar 01 2022 21:25:55 GMT+0900 (한국 표준시)
이제 날짜와 날짜 사이의 모든 날짜를 구하기 위해서는 시작하는 날짜와 마지막 날짜를 매개변수로 받는다. startDate
가 2022-03-02T01:10:55.593Z
이고, lastDate
가 2022-03-30T01:11:28.826Z
로 수를 받게 되면 while문을 통해 해당 값이 같아질 때까지 반복한다. 반복을 하면서 result 배열에 T를 기준으로 2022-03-02와 01:11:55.593Z로 나눠지게 된다. 이 때 우리는 날짜만 필요하기 때문에 startDate.toISOString().split('T')[0]
를 통해서 해당 값을 가져온다. 그 후에 startDate.setDate(startDate.getDate() + 1);
를 통해서 해당 날짜를 1일씩 더해주면 완성이다!
const getDatesStartToLast = (startDate, lastDate) => {
const result = [];
while (startDate <= lastDate) {
result.push(startDate.toISOString().split('T')[0]);
startDate.setDate(startDate.getDate() + 1);
}
return result;
};
// console.log(new Date().setMonth(new Date().getMonth() - 1), new Date())
// [ '2022-03-02',
//'2022-03-03',
//'2022-03-04',
//'2022-03-05',
//'2022-03-06',
//'2022-03-07',
//'2022-03-08',
//'2022-03-09',
//'2022-03-10',
//'2022-03-11',
//'2022-03-12',
//'2022-03-13',
//'2022-03-14',
//'2022-03-15',
//'2022-03-16',
//'2022-03-17',
//'2022-03-18',
//'2022-03-19',
//'2022-03-20',
//'2022-03-21',
//'2022-03-22',
//'2022-03-23',
//'2022-03-24',
//'2022-03-25',
//'2022-03-26',
//'2022-03-27',
//'2022-03-28',
//'2022-03-29',
//'2022-03-30' ]
이제 날짜를 포맷팅하기 위해서는 년도, 월, 날짜 3가지 형태로 값을 구해서 더해주면 된다. 년도는 2022
형식이기 때문에 해당 값만 new Date().getFullYear()
로 가져오면 된다.
그 후에 월은 new Date().getMonth()
를 구해보면 현재 달 보다 값이 적은 달이 나오게 된다. 즉, 지금이 3월달이면 2월달로 나오게 된다. 또한 10,11,12월 달도 있기 때문에 slice(-2)
를 해주어야한다. 단, 앞에 '0'
을 더해주어야지만 원하는 값을 출력할 수 있다.
마지막인 날짜도 월과 유사하게 작성하면 된다.
그 후에 year + '-' + month + '-' + day
로 값을 return해주면 해당 값을 구할 수 있다!
const format = (today) => {
const year = today.getFullYear(); // 년도
const month = ('0' + (1 + today.getMonth())).slice(-2) //월
// console.log(today.getMonth()) // -> 2
// console.log('0' + (1 + today.getMonth())).slice(-2)) // -> 03
const day = ('0' + (1 + today.getDate())).slice(-2) // 날짜
return year + '-' + month + '-' + day
}
// console.log(new Date())
// 2022-03-29
// console.log(new Date().setMonth(new Date().getMonth() - 1))
// 2022-03-01
간략하게 정규식 알아보기
^ab
: 시작단어가 ab와 일치하는지\d
: 숫자에 일치하는지{3}
: 3개 연속 일치[0-9]
: 0부터 9사이의 문자 구간에 일치(숫자)a|b
: a 또는 b와 일치[abc]
: a 또는 b 또는 cab$
: 끝 단어가 ab인지
RegExp(/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/)
해당 정규식을 분석해보자면
/^\d{4}
처음 시작이 숫자 4개여야 하고, -> YYYY(2022)0[1-9]
01, 02, ~ 09 이거나 1[012]
10, 11, 12여야 한다. -> MM(03)0[1-9]
-> 01, 02, ~ 09 / [12][0-9]
-> 10, 11, ~ 20 ~ 29 / 3[01]
-> 30, 31 const regex = RegExp(/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/);