Date作成者の罠


  • new Date()ジェネレータは、生成日に自動的にローカル時間に変換します.
  • new Date()のmonthパラメータ値は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時間は上記の場合だけでなく現地時間の間違いもあるので、よく読むべきです.