본문 바로가기
프로그래밍/알고리즘, 프로그래밍 언어

[JavaScript] 날짜 입력 시 요일을 리턴하는 함수 만들기

by 제이콥J 2021. 12. 3.

연도는 2007년으로 가정했을 때, 날짜(MM-DD)를 입력 시 요일을 반환하는 함수 function day 구현하기

 

조건

  • 매개변수 : Month, Date 정보가 String 형태로 전달
  • 출력 값 형태 : SUN, MON, TUE, WED, THU, FRI, SAT
  • 2007년 1월 1일은 월요일

입출력 예시

  • day("1 1")     // "MON"
  • day("3 17")  // "SAT"

 

코드 작성 방법 1

  • split 메소드로 매개변수를 month과 date로 나누기
  • new Date(날짜) 메소드로 해당 날짜와 요일 정보 얻기
  • getDay 메소드로 해당 날짜에서 요일 배열의 인덱스를 얻기
  • getDay 메소드의 요일 배열은 일요일을 0번 인덱스, 토요일을 6번 인덱스로 전제함

 

function day(str) {

  const month = str.split(' ')[0]
  const day = str.split(' ')[1]

  // getDay 메소드가 반환하는 인덱스에 맞추어 일~토 순서로 요일 입력
  const week = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']

  // new Date와 getDay 메소드 사용
  return week[new Date(`2007-${month}-${day}`).getDay()]

}

 

코드 작성 방법 2

- 1월 1일에서 입력된 날짜까지 지나간 일수를 구하여 (how many days), 7로 나눈 뒤 요일 구하기

- 월(month)별 일수를 배열에 담기

- 요일을 배열에 담기 (1월 1일 월요일 → 1번 인덱스 요소는 월요일)

 

function day(str) {

  const month = Number(str.split(' ')[0])
  let day = Number(str.split(' ')[1])
  const week = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']

  // 월별 일수를 배열에 담기 (1월은 31일까지 있고, 이를 1번 인덱스에 요소로 넣기)
  const months = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  
  // month를 일수로 환산하여 day에 더해주기 (1월 1일 이후 지난 일수 더해주기)
  for (let i=0; i<month; i++) {
    day += months[i]
  }

  // 일수를 7로 나누어 나머지를 구한 뒤 해당 요일 반환하기
  return week[day%7]
}

 

 

반응형

댓글