내 솔루션은 클라이언트 측에 시간대가 설정되어 있더라도 날짜를 동일하게 유지합니다. 누군가가 유용하다고 생각할 수도 있습니다.
내 유스 케이스 :
작업 날짜를 설정하는 할 일 앱을 만들고 있습니다. 이 날짜는 시간대에 관계없이 일정하게 유지되어야합니다.
예. 6 월 25 일 오전 8시에 친구에게 전화하고 싶습니다.
중국에있는 5 일 전 (6 월 20 일)에이 작업을 만듭니다.
그런 다음 같은 날에 며칠 동안 뉴욕으로 비행합니다.
그런 다음 6 월 25 일에 뉴욕에있는 동안 오전 7시 30 분에 깨어납니다 (30 분 후에 작업 알림을 받아야 함을 의미합니다. 직무)
따라서 작업은 시간대를 무시합니다. 그것은 '내가 어떤 시간대에 있든 오전 8시에하고 싶다'를 의미합니다.
내가하는 것은 '당신은 항상 런던 시간대-UTC에 있다고 가정합니다.'
의미는-사용자가 시간대에서 날짜를 선택하면이 날짜를 UTC의 동일한 날짜로 변환합니다. 즉. 중국에서는 오전 8시를 선택하지만 UTC에서는 오전 8 시로 변환합니다.
그런 다음-다음에 앱을 열 때-UTC로 저장된 날짜를 읽고 현재 시간대의 동일한 날짜로 변환합니다. 뉴욕 시간대로 오전 8시를 오전 8 시로 변환합니다.
이 솔루션은 날짜를 설정할 때의 위치와 읽는 위치에 따라 날짜가 다른 것을 의미 할 수 있지만 항상 같은 시간대에있는 것처럼 느끼는 방식으로 일정하게 유지됩니다.
코드를 작성해 봅시다 :
먼저 시간대를 무시하고 UTC로 변환하는 UTC의 두 가지 주요 기능이 있습니다.
export function convertLocalDateToUTCIgnoringTimezone(date: Date) {
const timestamp = Date.UTC(
date.getFullYear(),
date.getMonth(),
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds(),
);
return new Date(timestamp);
}
export function convertUTCToLocalDateIgnoringTimezone(utcDate: Date) {
return new Date(
utcDate.getUTCFullYear(),
utcDate.getUTCMonth(),
utcDate.getUTCDate(),
utcDate.getUTCHours(),
utcDate.getUTCMinutes(),
utcDate.getUTCSeconds(),
utcDate.getUTCMilliseconds(),
);
}
그런 다음이 날짜를 다음과 같이 저장 / 읽습니다.
function saveTaskDate(localDate: Date) {
// I convert your local calendar date so it looks like you've picked it being in UTC somewhere around London
const utcDate = convertLocalDateToUTCIgnoringTimezone(localDate);
api.saveTaskDate(utcDate);
}
function readTaskDate(taskUtcDate: Date) {
// I convert this UTC date to 'look in your local timezone' as if you were now in UTC somewhere around london
const localDateWithSameDayAsUTC = convertUTCToLocalDateIgnoringTimezone(taskUtcDate);
// this date will have the same calendar day as the one you've picked previously
// no matter where you were saving it and where you are now
}