const date = new Date('2024-01-15');
console.log(date);
// 실제로 어떤 시간이 나올까요?
같은 코드를 실행해도 당신이 어디에 있는지에 따라 다른 시간이 나온다. 이것이 바로 타임존 문제이다.
JavaScript의 Date객체는 내부적으로 UTC(협정 세계시) 기준으로 시간을 저장한다. 하지만 화면에 표시할 때는 당신의 컴퓨터 타임존을 따른다.
// 이 코드는 UTC 기준 2024년 1월 15일 00:00:00을 만듭니다
const date = new Date('2024-01-15');
// 하지만 서울에서 보면:
console.log(date.toString());
// "Mon Jan 15 2024 09:00:00 GMT+0900"
// 9시간 앞당겨져서 보입니다!
// 뉴욕에서 보면:
// "Sun Jan 14 2024 19:00:00 GMT-0500"
// 5시간 늦춰져서 보입니다!
// ❌ 문제 있는 방식
const date1 = new Date('2024-01-15');
console.log(date1); // 브라우저마다 다른 결과!
// ✅ 안전한 방식
const date2 = new Date('2024-01-15T00:00:00Z');
console.log(date2); // 모든 브라우저에서 같은 UTC 시간
// 서버에서 생성된 시간
const serverTime = new Date('2024-01-15 10:00:00');
// 클라이언트(브라우저)에서 받으면 자신의 타임존으로 변환됩니다
// 서울: 10:00:00
// 뉴욕: 20:00:00 (전날)
// 같은 시간인데 다르게 보여요!
// 사용자가 선택한 시간: 오후 2시
const appointmentTime = new Date('2024-01-15 14:00:00');
// 서버에 저장되고 다시 불러올 때
// 서울에서 설정 → UTC로 변환 → 다른 나라에서 보기
// → 완전히 다른 시간이 될 수 있어요!
const date = new Date('2024-01-15');
// 자정 맞게 설정하려고 했는데...
console.log(date.getHours()); // 0이 아니라 9일 수도 있어요!
// ✅ 좋은 방식: Z는 UTC를 의미합니다
const date = new Date('2024-01-15T09:30:00Z');
console.log(date); // 모든 곳에서 같은 시간!
// ✅ ISO 8601 형식
const now = new Date().toISOString();
console.log(now); // "2024-01-15T09:30:00.000Z"
왜 좋을까?
// ✅ 숫자로 저장하면 타임존 문제 없음
const timestamp = new Date('2024-01-15T09:30:00Z').getTime();
console.log(timestamp); // 1705324200000
// 다시 Date로 변환
const date = new Date(timestamp);
console.log(date); // 정확한 시간!
언제 사용할까?
const date = new Date('2024-01-15');
// ❌ 타임존 영향을 받음
console.log(date.getHours()); // 9시간 차이 날 수 있음
console.log(date.getMonth()); // 달도 틀릴 수 있음
// ✅ UTC 기준 - 타임존 상관없음
console.log(date.getUTCHours()); // 항상 정확함
console.log(date.getUTCMonth()); // 항상 정확함
console.log(date.getUTCDate()); // 항상 정확함
언제 사용할까?
// 사용자가 입력: 2024년 1월 15일
const userInput = new Date('2024-01-15');
// 서버에 보낼 때는 UTC로 변환
const dataForServer = userInput.toISOString();
// "2024-01-15T09:30:00.000Z"
// 서버에 저장
// DB: "2024-01-15T09:30:00.000Z" (UTC)
// 서버에서 받은 UTC 시간
const serverDate = new Date('2024-01-15T09:30:00Z');
// 현재 지역 시간대로 자동 변환되어 표시됨
console.log(serverDate.toString());
// 서울: "Mon Jan 15 2024 18:30:00 GMT+0900"
// 정확하게 보여집니다!
날짜/시간 계산이 복잡하다면 라이브러리를 추천한다.
// 1. Day.js (가볍고 간단함)
// npm install dayjs
const dayjs = require('dayjs');
const date = dayjs('2024-01-15').tz('Asia/Seoul');
console.log(date.format());
// 2. Moment.js (많은 기능)
// npm install moment-timezone
const moment = require('moment-timezone');
const seoulTime = moment('2024-01-15').tz('Asia/Seoul');
console.log(seoulTime.format());
타임존 문제는 복잡해 보이지만 규칙을 따르면 간단하다.
1. 저장: UTC + ISO 8601 형식
2. 계산: getUTC~() 메서드 사용
3. 표시: 브라우저가 자동으로 지역 시간으로 변환