Solusi saya menjaga tanggal tetap sama, apa pun zona waktu yang ditetapkan di sisi klien. Mungkin seseorang akan merasakan manfaatnya.
Kasus penggunaan saya:
Saya membuat aplikasi todo, tempat Anda mengatur tanggal tugas Anda. Tanggal ini harus tetap konstan, tidak peduli apa zona waktu Anda.
Contoh. Anda ingin menelepon teman Anda pada jam 8 pagi pada tanggal 25 Juni.
Anda membuat tugas ini 5 hari sebelum (20 Juni) saat Anda berada di Cina.
Kemudian, pada hari yang sama, Anda terbang ke New York selama beberapa hari.
Kemudian pada tanggal 25 Juni, ketika Anda masih di New York, Anda bangun jam 7:30 pagi (yang berarti Anda harus menerima notifikasi tugas dalam 30 menit (bahkan jam 1:30 siang sudah di China di mana Anda berada saat membuat tugas)
Jadi tugasnya mengabaikan zona waktu. Itu berarti 'Saya ingin melakukannya pada jam 8 pagi di zona waktu apa pun yang akan saya tempati'.
Yang saya lakukan adalah katakanlah 'Saya berasumsi Anda selalu berada di London Timezone - UTC'.
Artinya adalah - ketika pengguna memilih tanggal di Zona Waktu - saya mengonversi tanggal ini ke tanggal yang sama di UTC. yaitu. Anda memilih 8 pagi di Cina, tetapi saya mengubahnya menjadi 8 pagi dalam UTC.
Kemudian - lain kali Anda membuka aplikasi - Saya membaca tanggal yang disimpan dalam UTC dan mengubahnya ke tanggal yang sama di zona waktu Anda saat ini - mis. Saya mengonversi 8 pagi dalam UTC ke 8 pagi di zona waktu New York.
Solusi ini berarti bahwa tanggal tersebut dapat berarti sesuatu yang lain bergantung pada di mana Anda berada saat mengaturnya dan di mana Anda membacanya, tetapi itu tetap konstan dengan cara yang 'terasa' seperti Anda selalu berada di zona waktu yang sama.
Mari kita menulis beberapa kode:
Pertama - kami memiliki 2 fungsi utama untuk mengkonversi dari / ke UTC mengabaikan zona waktu:
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(),
);
}
Kemudian, saya menyimpan / membaca tanggal ini seperti:
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
}