私のソリューションでは、クライアント側で設定されているタイムゾーンに関係なく、日付を同じに保ちます。多分誰かがそれを便利だと思うでしょう。
私のユースケース:
タスクの日付を設定するToDoアプリを作成しています。この日付は、どのタイムゾーンにいても一定である必要があります。
例。6月25日の午前8時に友達に電話したいとします。
このタスクは、中国にいる5日前(6月20日)に作成します。
その後、同じ日にニューヨークに数日間飛行機で行きます。
次に、6月25日、まだニューヨークにいる間、午前7時30分に起床します(つまり、30分でタスク通知を受け取る必要があります(中国で作成したときの午後1時30分であっても)。仕事)
したがって、タスクはタイムゾーンを無視しています。これは、「午前8時に、どのタイムゾーンにでもなりたい」を意味します。
私がやっていることは、「あなたはいつもロンドンのタイムゾーンにいると思います-UTC」です。
つまり、ユーザーが自分のタイムゾーンで日付を選択すると、この日付がUTCの同じ日付に変換されます。すなわち。中国では午前8時を選択しますが、UTCでは午前8時に変換します。
次に、次にアプリを開いたときに、UTCに保存された日付を読み取り、現在のタイムゾーンの同じ日付に変換します。UTCでの午前8時をニューヨークのタイムゾーンでの午前8時に変換します。
この解決策は、日付をどこに設定するか、どこを読むかに応じて、日付が別の意味になることを意味しますが、常に同じタイムゾーンにいるように「感じる」ように一定です。
いくつかのコードを書いてみましょう:
まず、タイムゾーンを無視してUTCとの間で変換を行うための2つの主要な関数があります。
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
}