Date 생성자의 함정

ohbin Kwon·2022년 3월 16일
0
  • new Date() 생성자는 날짜를 생성할때 자동으로 현지 시간으로 변환한다.
  • new Date()의 month parameter는 0 - 11 까지의 값을 가지며, 0은 1월이다.
function solution(month, day){
  var date = new Date(2022, month, day+98); 
  let getMonth = date.getMonth();
  let getDay = date.getDate();
  return getMonth+'월'+getDay+'일';
}
console.log(solution(6,22))
// 답은 9월 28일 인데 27일이 나온다

//왜그런지 알아보겠다.
function solution(month, day){
  var date = new Date(2022, month, day); 
//실제로 month는 0-11의 값만 넣을 수 있으며, 0을 1월로 인식한다.
  console.log(date)
// 2022-07-21-15:00:00
// 여기서 문제가 발생한다. 실제 데이터 값은 7월 21일 3시이기 때문에, day에 숫자를 더해
// 월을 바꾼다고 하더라도, 9월 -> 10월로 변할때는 30일이 끝인데, 실제로 8월->9월로 변할떄는 31일이 끝
  let getMonth = date.getMonth(); // getMonth는 또 1을 더해 return 6
  let getDay = date.getDate(); // 반올림해서 return 22
  return getMonth+'월'+getDay+'일';
}
console.log(solution(6,22))
// 6월 22일로 답이 잘 나온다.
// 그래서 실제 계산과 같도록 month를 -1해주고, getMonth에서 다시 +1을 해줘야한다.
function solution(month, day){
  var date = new Date(2022, month-1, day+98);
  console.log(date)
  let getMonth = date.getMonth()+1;
  let getDay = date.getDate();
  return getMonth+'월'+getDay+'일';
}
console.log(solution(6,22))
  • Date() 생성자, UTC 시간은 위의 상황뿐 아니라, 현지시간의 오류도 있기에 잘 뜯어봐야할것같다.
profile
개발 로그

0개의 댓글