기상 API를 사용해서 웹을 만들었는데, 지금까지 찾아내지 못했던 버그가 있었다.
API를 호출하는 링크에서 현재 접속 시간에 맞게 날짜와 시간을 유동적으로 바꿔주는 코드를 작성했는데, 이게 0시 ~ 1시까지 작동하지 않는 문제가 있었다.
원래부터 DB 업데이트가 정각에 이루어지지 않아서 그런지 매 시간 정각에 API 호출 오류가 있어 '현재시간 - 1'을 기준 시간으로 잡았는데, 생각해보니 0시에 접속하면 기준 시간이 -1시가 되버리기 때문에 오류가 발생할 수밖에 없었다.
// 한 시간 전의 시간을 구하기 위한 기존 코드
const hour=new Date().getHours-1;
즉 시간을 먼저 구하고 그 값에 -1을 주었기 때문에 오류가 발생한 것이다.
개선된 코드
getTime() 매서드는 1970년 1월 1일 00:00:00 UTC 기준으로부터 경과한 밀리초(ms) 값을 반환한다.
따라서 현재시간을 나타내는 'curTime' 객체를 통해 UTC 기준 시간으로부터 몇 밀리초가 지났는지 확인 후, 1시간(360000ms)을 뺀 값을 새로운 시간 객체 'oneHourAgo'로 만들어 활용해야 한다.
// 한 시간 전의 시간을 구하기 위한 개선된 코드
const curTime=new Date();
const oneHourAgo=new Date(curTime.getTime()-60*60*1000);
const hour=oneHourAgo.getHours();
언뜻 보면 코드가 길어져 비효율적으로 보일 수 있지만, 단순히 시간만 구하는 것이 아닌 1시간 전의 '연도', '월', '일', '시', '분', '초'를 모두 구해야 한다고 생각하면 이보다 효율적인 방법을 찾긴 어려워보인다.
게다가 정확히 1시간 전이 아닌 '32분 전'이라던가 '9일 12시간 후'라던가 하는 애매한 시간을 계산하려면 다른 방법이 없을 것 같다.
'JavaScript' 카테고리의 다른 글
[JavaScript] 텍스트 물결 효과 만들기 (0) | 2025.05.07 |
---|---|
[JavaScript] localStorage 사용하기 (찜하기 기능 개선) (0) | 2025.02.12 |
[JavaScript] Object.entries() 매서드 사용하기 (0) | 2025.02.09 |
[JavaScript] Intersection Observer API 사용하기 (0) | 2025.01.19 |