오늘 날짜와 한달 전 날짜 사이의 날짜들 모두 구하기

오늘 날짜 구하기

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 (한국 표준시)

날짜와 날짜 사이의 모든 날짜 구하기

이제 날짜와 날짜 사이의 모든 날짜를 구하기 위해서는 시작하는 날짜와 마지막 날짜를 매개변수로 받는다. startDate2022-03-02T01:10:55.593Z이고, lastDate2022-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' ]

YYYY-MM-DD 형식으로 포맷팅하기

이제 날짜를 포맷팅하기 위해서는 년도, 월, 날짜 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

YYYY-MM-DD 형식의 정규식

간략하게 정규식 알아보기

  • ^ab : 시작단어가 ab와 일치하는지
  • \d : 숫자에 일치하는지
  • {3}: 3개 연속 일치
  • [0-9]: 0부터 9사이의 문자 구간에 일치(숫자)
  • a|b : a 또는 b와 일치
  • [abc]: a 또는 b 또는 c
  • ab$ : 끝 단어가 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
    이 3개의 패턴이 끝 숫자여야한다.
  const regex = RegExp(/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/);