JavaScript에서 타임스탬프 변환 방법: Unix, ISO 8601 및 기타
Source: Dev.to
타임스탬프 처리는 모든 JavaScript 개발자가 지속적으로 수행하지만 체계적으로 생각해 보지는 않는 일 중 하나입니다— * 1000 을 빼먹거나 예상치 못한 시간대 이동으로 인한 버그가 프로덕션에 영향을 미치기 전까지는 말이죠. 이 가이드는 JavaScript에서 타임스탬프를 변환하는 방법에 대한 완전한 참고 자료입니다: Unix 초를 ISO 8601으로, Date 객체 API, Intl.DateTimeFormat을 이용한 시간대 포맷팅, 그리고 date‑fns 또는 dayjs와 같은 라이브러리를 언제 사용해야 하는지에 대해 다룹니다.
Unix 타임스탬프와 사람이 읽을 수 있는 날짜 사이를 빠르게 변환하려면 타임스탬프 변환기를 사용하세요 — 코딩이 필요 없습니다.
JavaScript Date 객체
내장된 Date 객체는 JavaScript에서 시간의 기반입니다. 모든 타임스탬프는 내부적으로 Unix epoch(1970년 1월 1일, 00:00:00 UTC) 이후 밀리초 단위로 저장됩니다:
{codeDateBasics}
주의: Date 생성자의 month 매개변수는 0‑부터 시작합니다(January = 0, December = 11). 이 레거시 특성은 피할 수 없으니 외워두세요.
Unix 타임스탬프: 초 vs. 밀리초
Unix 타임스탬프는 전통적으로 초 단위로 epoch(1970‑01‑01 00:00:00 UTC)부터의 시간을 셉니다. JavaScript의 Date는 밀리초 단위로 동작합니다. 이 불일치가 수많은 버그의 원인입니다:
{codeUnixConvert}
두 가지를 빠르게 구분하는 방법:
- 초 → 약 10자리 (예:
1711000000) - 밀리초 → 약 13자리 (예:
1711000000000)
Python, Go, 데이터베이스 등에서 타임스탬프를 받았다면 거의 확실히 초 단위이므로 new Date()에 전달하기 전에 1000을 곱해 주세요.
ISO 8601: 날짜를 저장하고 전송하기 위한 올바른 형식
데이터베이스에 날짜를 저장하거나 API 응답으로 전송하거나 JSON으로 직렬화할 때는 항상 ISO 8601을 사용하세요. 모호하지 않으며 문자열로 정렬 가능하고, 전 세계적으로 파싱할 수 있습니다:
{codeISO8601}
규칙: 항상 시간대 표시자(Z는 UTC, +HH:MM은 오프셋)를 포함하십시오. 시간대가 없는 ISO 문자열은 모호합니다 — 환경마다 로컬 시간으로 해석되며, 코드가 실행되는 위치에 따라 값이 달라집니다.
시간대 처리
시간대 버그는 머신의 로컬 설정에 따라 달라지기 때문에 재현하기 가장 어려운 버그 중 하나입니다. 가장 안전한 방법은 모든 시간을 UTC로 저장하고, 표시할 때만 로컬 시간으로 변환하는 것입니다.
{codeTimezone}
Intl.DateTimeFormat API(모든 최신 브라우저와 Node 12+에 내장)는 IANA 시간대 데이터베이스(예: America/New_York)를 사용하며 일광 절약 시간을 자동으로 처리합니다. 시간대 ID에 숫자형 UTC 오프셋(+05:30)을 사용하지 마세요 — 이는 DST를 고려하지 않습니다.
다른 시간대에서 특정 Unix 타임스탬프를 확인해야 할 때는, 우리 Timestamp Converter 가 시각적인 인터페이스로 모든 변환을 처리합니다.
date-fns: 함수형 접근법
네이티브 Date API가 제공하는 것보다 더 많은 것이 필요한 프로젝트에 대해, date‑fns는 가장 인기 있는 현대적인 선택입니다. 완전히 트리‑쉐이킹이 가능하여 실제로 import한 함수만 번들에 포함됩니다:
{codeDateFns}
- 모든
Date객체는 불변으로 취급됩니다(변경 불가). - 함수는 순수합니다 — 동일한 입력이 주어지면 언제나 동일한 출력을 반환합니다.
- 이는 React 컴포넌트에서 예측 가능하게 만들고 테스트를 쉽게 합니다.
- 타임존 지원은 별도의
date-fns-tz패키지에 포함되어 있습니다.
dayjs: 가벼운 Moment 대체제
Moment.js(현재 유지보수 모드)에서 마이그레이션 중이라면, dayjs는 거의 동일한 API를 제공하지만 크기가 약 ~2 KB에 불과합니다. 플러그인을 통해 UTC, 타임존, 상대 시간 지원을 확장할 수 있습니다:
{codeDayjs}
- dayjs를 선택하세요. 익숙한 체이닝 API를 원하고 번들 크기를 최소화하고 싶을 때.
- date‑fns를 선택하세요. 순수 함수, TypeScript‑우선 설계, 그리고 세밀한 트리‑쉐이킹이 필요할 때.
Common Conversion Cheat Sheet
{codeCommonConversions}
이 도구들을 오프라인에서도 사용하고 싶으신가요? The DevToolkit Bundle ($9 on Gumroad) packages 40+ developer tools into a single downloadable kit — no internet required.
요약
- JavaScript의
Date는 밀리초를 사용합니다; 많은 API와 데이터베이스는 Unix 초를 사용하므로 항상 어떤 단위인지 확인하세요. - 현재 Unix 밀리초를 얻으려면
Date.now()를 사용하고, 초로 변환하려면 1000으로 나누세요. - ISO 8601 문자열에는 항상 시간대 표시자(
Z또는 오프셋)를 포함하세요. - DST를 고려한 표시 형식에는 IANA 시간대 ID를 사용한
Intl.DateTimeFormat을 활용하세요. - 함수형/불변 패턴에는 date‑fns를, 가벼운 Moment‑유사 API에는 dayjs를 사용하세요.
즉석 변환이 필요할 때는 우리의 타임스탬프 변환기를 사용하세요.
무료 개발자 도구
이 글이 도움이 되었다면 DevToolkit 을 확인해 보세요 — 회원가입 없이 사용할 수 있는 40개 이상의 무료 브라우저 기반 개발자 도구.
인기 도구:
JSON Formatter ·
Regex Tester ·
JWT Decoder ·
Base64 Encoder
🛒 Gumroad에서 DevToolkit 스타터 키트 받기 — 소스 코드, 오프라인 접근 및 기타 기능.
