[JS] 2016
function solution(a, b) {
let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
let dateStr = "2016-" + a + "-" + b;
let date = new Date(dateStr);
return week[date.getDay()];
}
`week` 배열 : 요일을 문자열로 저장
배열의 인덱스는 `Date`객체의 `getDay()`메서드가 반환하는 값과 일치
날짜 문자열 생성 : `"2016-" + a + "-" + b`는 연도 `2016`과 입력된 월(a)과 일(b)을 조합하여 날짜 문자열 생성
`Date`객체 생성 : `new Date(dateStr)`은 주어진 문자열 `dateStr`을 기반으로 `Date`객체를 생성
이 객체는 입력된 날짜를 나타냄
`date.getDay()`는 `Date` 객체에서 요일을 0(일요일)부터 6(토요일)까지의 숫자로 반환
이 숫자를 `week`배열의 인덱스로 사용하여 요일 문자열을 얻어 반환
`Date`객체는 다양한 형식의 날짜 문자열을 처리할 수 있음
- YYYY-MM-DD: 연도, 월, 일을 하이픈(-)으로 구분하는 형식
- 예: "2016-08-05"
- YYYY/MM/DD: 연도, 월, 일을 슬래시(/)로 구분하는 형식
- 예: "2016/08/05"
- Month Day, Year: 월, 일, 연도를 콤마와 공백으로 구분하는 형식
- 예: "August 5, 2016"
`new Date(dateStr)`의 동작
1. 문자열 파싱 : `Date`객체는 문자열을 파싱하여 내부적으로 날자와 시간을 표현하는 객체 생성
문자열의 형식이 표준 형식일 경우, `Date`객체는 이를 잘 인식하여 적절한 날짜를 생성
1. 객체 생성 : 문자열이 파싱된 후, `Date`객체가 생성
이 객체는 생성된 날짜와 시간을 포함하고 있으며, 다양한 메서드를 통해 날짜와 시간을 조작하거나 조회 가능
let dateStr = "2016-08-05";
let date = new Date(dateStr);
console.log(date); // 출력: Fri Aug 05 2016 00:00:00 GMT+0000 (Coordinated Universal Time)
console.log(date.getFullYear()); // 출력: 2016
console.log(date.getMonth() + 1); // 출력: 8 (월은 0부터 시작하므로 1을 더해줍니다)
console.log(date.getDate()); // 출력: 5
`getDay()` 메서드의 동작
형식 : `date.getDay()`
반환값 : 0~6까지의 정수 (일요일~토요일)
이 메서드는 `Date`객체가 나타내는 날짜의 요일을 숫자로 반환
요일 숫자는 배열의 인덱스처럼 사용 가능하며, 배열을 이용해 요일 이름을 쉽게 참조
다른 사람 풀이
function getDayName(a,b){
var tempDate = new Date(2016, a-1, b);
return tempDate.toString().slice(0,3).toUpperCase();
}
//아래 코드는 테스트를 위한 코드입니다.
console.log(getDayName(5,24));
function solution(a, b) {
return new Date(2016, a-1, b).toString().slice(0,3).toUpperCase();
}
// 다른 방법
function solution(a, b) {
// 윤년은 2월이 29일까지 있고, 1년이 366일이다.
// 4, 100, 400으로 나누어지는 년도는 윤년이다.
const weekToDay = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
const leapYearMonths = [31,29,31,30,31,30,31,31,30,31,30,31];
let day = b+4; // 1월 1일은 FRI, b가 1일 때 인덱스로는 5가 되어야한다.
// 1월은 이전 월의 일수를 더하지 않음으로 a-1 조건으로 해야한다.
for(let i = 0; i < a-1; ++i){
day += leapYearMonths[i];
}
return weekToDay[day%7];
}
var solution=(m,d)=>(new Date('2016-'+m+'-'+d)+'').split(' ')[0].toUpperCase()
// 또 다른 방법
var solution=(_,$)=>(new Date(2016,--_,$)+'').toUpperCase().slice(0, 3)