[Javascript] 기준 날짜를 내가 설정한 시간의 기준 날짜로 구하기
이슈
- 사용자 기준 시간이 내가 설정한 시간이 아닌 브라우저 시간을 기준으로 나오는 현상이 있었습니다
예시
- 한국(UTC+9) 2024년 3월 5일 아침 8시에 내가 설정한 시간대가 UTC-1이고 기준 날짜를 구하는 경우(UTC+9와 UTC-1은 10시간 차이가 납니다)
- 한국 시간: 2024-03-05 08:00 -> 기준 날짜: 3월 5일
- 설정 시간: 2024-03-04 22:00 -> 기준 날짜: 3월 4일
- 하지만 자바스크립트에서
new Date().getDate()
를 구하면 한국 시간대로 기준 날짜가 나옵니다
해결
- 브라우저에서 보정되는 시간을 빼서 UTC를 구합니다
- 위에서 구한 UTC에 내가 설정한 시간을 더해 보정된 날짜를 구합니다
const myTimezone = -1; // 내가 설정한 시간
const localDate = new Date('2024-03-05 08:00'); // 로컬 한국 시간
const offsetHour = -new Date().getTimezoneOffset() / 60; // 브라우저에서 보정되는 시간
const utcDate = new Date(localDate.getTime() - offsetHour * 60 * 60 * 1000); // UTC, 2024-03-04 23:00
const myDate = new Date(utcDate.getTime() + myTimezone * 60 * 60 * 1000); // 내가 설정한 날짜 2024-03-04 22:00