JavaScript Date 플레이그라운드
JavaScript Date 표현식을 입력하고 모든 출력 형식과 속성을 실시간으로 탐색하세요 — toISOString, toString, getTime, getFullYear 등.
JavaScript Date 객체
JavaScript에 내장된 Date 객체는 시간을 내부적으로 Unix 에포크(1970년 1월 1일 00:00:00 UTC) 이후의 밀리초 수로 저장합니다. 모든 Date 인스턴스는 결국 이 하나의 정수입니다. toISOString(), toString(), toLocaleString() 등 다양한 메서드는 같은 기본 값을 다르게 표시하는 방법일 뿐입니다.
JavaScript 날짜의 흔한 함정
Date의 몇 가지 동작은 숙련된 개발자도 실수하게 만듭니다:
- 월은 0부터 시작: 1월은 0, 12월은 11 — 표시할 때 항상 1을 더하세요
- new Date('2024-01-01')은 UTC 자정으로, new Date('2024/01/01')은 로컬 자정으로 파싱됩니다
- new Date(2024, 0, 1)은 로컬 시간으로 2024년 1월 1일을 만듭니다(월은 0부터)
- Date.now()는 밀리초를 반환합니다. Math.floor(Date.now() / 1000)은 Unix 초를 줍니다
- 86400000 ms를 더해 날짜를 넘기는 방식은 피하세요 — DST로 잘못된 시각이 될 수 있습니다
JavaScript에서 시간대 다루기
JavaScript의 Date 객체에는 시간대 속성이 없으며 항상 UTC로 저장됩니다. 시간대 변환은 표시 시점에 Intl.DateTimeFormat API로 처리합니다.
- new Intl.DateTimeFormat('en-US', { timeZone: 'Asia/Tokyo', dateStyle: 'full', timeStyle: 'long' }).format(date)
- date.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })
- new Intl.DateTimeFormat('en-CA', { timeZone: tz }).formatToParts(date) — 맞춤 포맷용으로 개별 부분을 반환합니다
플레이그라운드 출력 읽는 법
플레이그라운드는 같은 Date 값을 여러 관점으로 보여 주어 단위와 시간대 오류를 빠르게 찾게 해줍니다. 먼저 getTime을 Unix 초와 비교한 뒤 ISO와 로컬 문자열을 확인하세요. ISO 날짜는 맞는데 로컬 문자열만 달라 보이면 타임스탬프는 올바르고 표시 시간대만 바뀐 것입니다.
- getTime은 항상 Unix 에포크 이후의 밀리초입니다
- Unix 초는 getTime을 1000으로 나눈 뒤 내림한 값입니다
- toISOString은 항상 끝에 Z가 붙은 UTC를 표시합니다
- toString과 toLocaleString은 옵션으로 재정의하지 않는 한 브라우저의 로컬 시간대로 표시합니다