2016년 A월 B일
2016년 1월 1일은 금요일입니다. 2016년 A월 B일은 무슨 요일일까요? 두 수 A,B를 입력받아 A월 B일이 무슨 요일인지 출력하는 getDayName 함수를 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각SUN,MON,TUE,WED,THU,FRI,SAT
를 출력해주면 됩니다. 예를 들어 A=5, B=24가 입력된다면 5월 24일은 화요일이므로 TUE를 반환하면 됩니다.
1. 처음 생각한 로직
월마다 일 수가 다르다.
a월이 1,3,5,7,10,12 > 31일
a월이 4,6,8,9,11 > 30일
a월이 2 > 28일일별로 요일이 다르다.
const day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]
7일 day[0]
6일 day[6]전체 일수가 x라면
x일을 7로 나눈후 나머지값 arr[x%7]
x의 값은 ?전체 일수를 배열과 연결하자.
31일 + 1 = 32 // 배열에서 금요일부터 32번 후의 값
1월0
2월31일 + b
3월31일 + 29일 + b
4월31일 + 29일 + 31일 + b
5월31일 + 29일 + 31일 + 30일 + b
6월31일 + 29일 + 31일 + 30일 + 31일=31일 * 3 + 30일 * 2 - 1
7월31일 * 3 + 30일 * 3 -1
8월31일 * 4 + 30일 * 3 -1
9월31일 * 5 + 30일 * 3 -1
10월31일 * 5 + 30일 * 4 -1
11월31일 * 6 + 30일 * 4 -1
12월31일 * 6 + 30일 * 5 -1
1 | function getDayName(a, b) { |
2. case 문이 너무 비효율적이다. > 반복문으로 바꾸자
1 | function getDayName(a, b) { |
3. Date 메소드를 사용해보자.
메소드 사용
1 | function getDayName(a, b) { |
템플릿 리터럴을 사용하지 않으면 값이 이상하게 나온다.
이유
1
2
3
4new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);** dateString*
날짜를 표현하는문자열값. 문자열은 parse 메소드에 의해 인식가능한 형식이어야 한다.** year, month, date*
날짜의 각 부분을 표현하는정수값. 월(month)부분은 0부터 11까지의 값을 가지며, 0이 1월을, 11이 12월을 가리킨다.때문에 템플릿 리터럴로 넣게 되면 문자열이 되어서 그대로 파싱하지만, 숫자일 경우 배열의 인덱스값으로 인지하여서 월의 시작숫자가 0이게 된다.
즉, let date = new Date(2016,a-1,b) 이렇게 넣어야 한다.