JavaScript에서 타임스탬프 변환 방법: Unix, ISO 8601 및 기타

발행: (2026년 3월 25일 PM 02:01 GMT+9)
8 분 소요
원문: Dev.to

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 스타터 키트 받기 — 소스 코드, 오프라인 접근 및 기타 기능.

0 조회
Back to Blog

관련 글

더 보기 »

j.s에서 looping이란 무엇인가

JavaScript에서 루프는 같은 코드를 반복해서 작성하지 않고도 동일한 작업을 계속 수행하고 싶을 때 유용합니다. 유형…

밈 생성기 뒤의 기술 아키텍처

밈은 인터넷의 지배적인 커뮤니케이션 매체이다. 밈 생성기는 기술적으로 텍스트 오버레이 기능을 갖춘 캔버스 컴포지팅 엔진이다. 하나를 구축하는 중...