-
[JS] Date 객체 사용시 주의할 점programing/Language 2019. 8. 4. 14:16
안녕하세요, Einere입니다.
(ADblock을 꺼주시면 감사하겠습니다.)
시간을 다루기 위해서
Date
객체를 사용하는 일이 많을 것입니다.최근에
Date
객체를 이용한 기능을 구현하면서 겪었던 점에 대해 공유하려고 합니다.month
프로그래머스 과제로 투두앱을 제작하는 과제가 있었는데, 그 때 월이 제대로 설정되지 않아서 정상적으로 작동하지 않았던 기억이 있습니다. 또한 최근에 부스트캠프에서 열차 도착 시간 예측 기능을 구현해야 했는데, 마찬가지로 또 요상한 동작을 하는 것을 경험했습니다.
이런 현상이 발생하는 이유는 바로
Date
객체의 월(month)을 잘못 설정했기 때문입니다.const current = new Date(); console.log(current); // Sun Aug 04 2019 14:05:42 GMT+0900 (한국 표준시) 출력 current.getMonth(); // 7 출력
으음?? 분명 글을 쓰는 시점은 8월인데
getMonth()
하니 7이 튀어나옵니다.한번 시간여행을 해서 2018년 1월 1일로 가볼까요?
const dateTime = new Date(2018, 1, 1, 13, 24, 35); console.log(dateTime); // Thu Feb 01 2018 13:24:35 GMT+0900 (한국 표준시) 출력 console.log(dateTime.getMonth()); // 1 출력
결과를 보니 2018년 2월 1일로 설정되었군요.
위 결과를 토대로 추론을 해보면, 월을 설정할 때 시작은 0부터 시작하여 11에서 끝난다는 것을 알 수 있습니다.
한번 더 테스트 해볼까요?
const dec = new Date(2019, 11, 25, 8, 9, 10); console.log(dec); // Wed Dec 25 2019 08:09:10 GMT+0900 (한국 표준시) 출력
오.. 예상한대로 출력됩니다.
정말 일관성 없는 객체인 것 같습니다.
그럼 일도 0부터 시작하지 왜..
MDN
The getMonth() method returns the month in the specified date according to local time, as a zero-based value (where zero indicates the first month of the year).
웹 개발자의 성지 MDN에서
getMonth()
를 찾아보니 위와 같은 말이 나옵니다. 말하자면 0기반 값이라고 하네요.이래서 레퍼런스를 먼저 살펴봐야 합니다...
'programing > Language' 카테고리의 다른 글
[Functional] promise와 monad, kleisli composition (0) 2019.08.15 [Functional] join, find, flatten (0) 2019.08.12 [JS] Scope, Execution context, Closure (0) 2019.08.03 [JS] SVG에 대해서 (0) 2019.08.02 [JS] CanvasRenderingContext2D 정리 1 (0) 2019.08.01 댓글