한국 시간 기준 오늘 포함 지난 7일 날짜 List 만들기

KeyEun Lee·2023년 12월 4일
0

231204 TIL

요구사항

  • 오늘 날짜 포함 7일이 들어있는 날짜 리스트를 만들어주세요
  • 근데 시간 기준이 KST (한국 시간)인...
  • 근데 오늘 날짜가 8:00 AM에 업데이트 되는...
  • 근데 날짜 형식이 year.{year}.{month}.${day}인...

Step 1. 8:00 AM에 업데이트 되는 오늘 KST 날짜를 생성하자

function getKSTDate() {
  const now = new Date();
  const kstOffset = 9 * 60; // KST is UTC+9
  const utc = now.getTime() + now.getTimezoneOffset() * 60000;
  const kstDate = new Date(utc + (kstOffset * 60000));

  // Check if the current KST time is before 8:00 AM
  if (kstDate.getHours() < 8) {
    kstDate.setDate(kstDate.getDate() - 1);
  }

  return kstDate;
}

위 함수를 실행시키면 다음과 같은 datetime를 반환한다
예) Mon Dec 04 2023 18:23:44 GMT+0900 (Korean Standard Time)

Step 2.원하는 날짜 형식을 반환하는 함수

function formatDate(date) {
  const year = date.getFullYear();
  const month = ('0' + (date.getMonth() + 1)).slice(-2);
  const day = ('0' + date.getDate()).slice(-2);

  return `${year}.${month}.${day}`;
}
  • getMonth()는 Zero-base 로 설정되어있기 때문에 +1을 해줘야 정상적인 해당 달이 출력된다
  • yyyy.mm.dd 형식을 위해 앞에 '0'을 붙여주고 뒤에서 두개만 잘라준다 (.slice(-2))

Step 3. 지난 7일 Date List를 만들어주는 함수

function getLastSevenDays() {
  const endDate = getKSTDate();
  let dates = [];

  for (let i = 6; i >= 0; i--) {
    const date = new Date(endDate);
    date.setDate(date.getDate() - i);
    dates.push(formatDate(date));
  }

  return dates;
}

const dateList = getLastSevenDays();
  • getKSTDate()가 반환하는 것이 결국 List의 가장 최근 날짜 = endDate
  • for문을 사용해서 endDate에서 하루씩 빼서 date를 생성
    1) Date.prototype.setDate(): 현재 설정된 월의 시작 부분을 기준으로 Date 객체의 날짜 설정
    2) Date.prototype.getDate(): 주어진 날짜의 현지 시간 기준 일을 반환

Takeaway

  • 요구사항이 복잡할 때는 step by step으로 사고하여, 대장 함수를 구성하는 하위 함수는 무엇일지를 그려보자
profile
느리지만 꾸준히 공부합니다 https://keyeun.com/

0개의 댓글