JavaScript에서 Unix 타임스탬프 다루기

JavaScript에서 Unix 타임스탬프를 다루는 데 필요한 모든 것 — 현재 시간 가져오기, 타임스탬프로 Date 만들기, 어떤 시간대로든 포맷, 흔한 실수 피하기.

현재 Unix 타임스탬프 가져오기

JavaScript는 현재 시각을 숫자 타임스탬프로 얻는 여러 동등한 방법을 제공합니다. 모두 Unix 에포크 이후의 밀리초 수를 반환합니다.

  • Date.now() → the fastest and most readable — 1700000000000 (milliseconds)
  • Math.floor(Date.now() / 1000) → Unix timestamp in seconds — 1700000000
  • +new Date() → same as Date.now(), using the unary plus operator
  • new Date().getTime() → explicit method call, same result as Date.now()

Unix 타임스탬프로 Date 객체 만들기

Date 생성자는 에포크 이후의 밀리초를 받습니다. 초 단위 타임스탬프는 생성자에 넘기기 전에 항상 1000을 곱하세요.

  • new Date(1700000000 * 1000) → from seconds (most common case)
  • new Date(1700000000000) → from milliseconds (JavaScript APIs, Java)
  • new Date(Date.now()) → current time as a Date object
  • new Date(0) → the Unix epoch: January 1, 1970 00:00:00 UTC

날짜 포맷 — 내장 문자열 메서드

Date 객체에는 여러 내장 문자열 변환 메서드가 있으며, 각각 다른 형식을 만듭니다.

  • .toISOString() → '2023-11-15T06:13:20.000Z' — ISO 8601, always UTC, machine-readable
  • .toUTCString() → 'Wed, 15 Nov 2023 06:13:20 GMT' — RFC 7231, human-readable UTC
  • .toString() → local timezone string with full zone name
  • .toLocaleString() → locale-aware format in the user's local timezone

Intl.DateTimeFormat로 시간대에 맞는 포맷

외부 라이브러리 없이 일관되고 시간대를 고려한 날짜 포맷을 하려면 Intl.DateTimeFormat API를 사용하세요. 모든 최신 브라우저와 Node.js 13+에서 지원됩니다.

  • new Intl.DateTimeFormat('en-US', { timeZone: 'America/New_York', dateStyle: 'full', timeStyle: 'long' }).format(date)
  • date.toLocaleString('en-GB', { timeZone: 'Europe/London', hour12: false })
  • new Intl.DateTimeFormat('zh-CN', { timeZone: 'Asia/Shanghai' }).format(date)
  • new Intl.DateTimeFormat('en-CA', { timeZone: tz }).formatToParts(date) → array of {type, value} parts for custom layouts

날짜 문자열을 다시 Unix 타임스탬프로 변환

반대 방향으로 — 날짜 문자열에서 Unix 타임스탬프로 — 가려면 Date.parse()를 쓰거나 문자열을 Date 생성자에 넘기세요.

  • new Date('2023-11-15T06:13:20Z').getTime() / 1000 → Unix seconds from ISO 8601 UTC
  • new Date('2023-11-15T01:13:20-05:00').getTime() → Unix milliseconds from ISO with offset
  • Date.parse('2023-11-15T06:13:20Z') → same as new Date(...).getTime()
  • Always use ISO 8601 format with explicit timezone for predictable parsing

흔한 함정

JavaScript 개발자가 날짜와 타임스탬프에서 가장 자주 저지르는 실수입니다:

  • new Date(1700000000) — × 1000을 빠뜨리면 2023년이 아니라 ~1970년이 됨
  • getMonth()은 1–12가 아니라 0–11을 반환 — 표시할 때 항상 1을 더하세요
  • new Date('2024-01-01')은 UTC 자정; new Date('2024/01/01')은 로컬 자정
  • new Date(2024, 0, 1) = 1월 1일(생성자에서도 월은 0부터)
  • 86400000ms를 더해 '내일'을 얻으면 DST 경계에서 실패할 수 있음 — 대신 setDate(d.getDate() + 1) 사용

JavaScript Unix 타임스탬프 FAQ

JavaScript에서 초 단위 Unix 타임스탬프를 어떻게 얻나요?
Math.floor(Date.now() / 1000)을 사용하세요. Date.now()는 밀리초를 반환하므로 1000으로 나누고 내림하면 정수 Unix 초가 됩니다.
Unix 타임스탬프를 넣은 new Date()가 왜 1970년을 보이나요?
Date 생성자는 밀리초를 기대합니다. 10자리 초 타임스탬프는 1000을 곱해야 합니다: new Date(seconds * 1000).
특정 시간대로 JavaScript 날짜를 어떻게 포맷하나요?
명시적 timeZone 옵션과 함께 Intl.DateTimeFormat을 사용하세요. 예: new Intl.DateTimeFormat('en-US', { timeZone: 'America/New_York' }). 일광 절약 시간을 자동 적용하며 외부 라이브러리가 필요 없습니다.