मेरा समाधान तारीख को वही रखता है जो क्लाइंट-साइड पर टाइमजोन सेट करने के लिए नहीं है। शायद किसी को यह उपयोगी लगेगा।
मेरा उपयोग मामला:
मैं एक टूडू ऐप बना रहा हूं, जहां आप अपने कार्य की तिथि निर्धारित करते हैं। यह तारीख स्थिर रहनी चाहिए चाहे आप किसी भी समय में हो।
उदाहरण। आप 25 जून को सुबह 8 बजे अपने दोस्त को फोन करना चाहते हैं।
जब आप चीन में हों, तो आप इस कार्य को ५ दिन (२० जून) से पहले करें।
फिर, उसी दिन, आप कुछ दिनों के लिए न्यूयॉर्क जाते हैं।
फिर 25 जून को, जब आप अभी भी न्यूयॉर्क में हैं, तो आप सुबह 7:30 बजे उठते हैं (जिसका अर्थ है कि आपको 30 मिनट में कार्य सूचना प्राप्त करनी चाहिए (यहां तक कि यह 1:30 बजे चीन में पहले से ही है जहां आप बनाते समय थे) कार्य)
इसलिए कार्य समयक्षेत्र की अनदेखी कर रहा है। इसका मतलब है 'मैं इसे सुबह 8 बजे करना चाहता हूं जो भी समयक्षेत्र मैं होगा'।
मैं जो करता हूं वह कहता हूं 'मुझे लगता है कि आप हमेशा लंदन टाइमजोन - यूटीसी में हैं।'
इसका क्या अर्थ है - जब उपयोगकर्ता अपने / अपने Timezone में कुछ तारीख चुनता है - मैं इस तिथि को UTC में उसी तिथि में परिवर्तित करता हूँ। अर्थात। आप चीन में सुबह 8 बजे जाते हैं, लेकिन मैं इसे 8 बजे यूटीसी में परिवर्तित करता हूं।
फिर - अगली बार जब आप ऐप खोलते हैं - मैं UTC में सहेजे गए दिनांक को पढ़ता हूं और इसे आपके वर्तमान समयक्षेत्र में उसी दिनांक में परिवर्तित करता हूं - जैसे। मैं UTC में सुबह 8 बजे से न्यूयॉर्क के समयक्षेत्र में 8 बजे तक परिवर्तित हो जाता हूं।
इस समाधान का मतलब है कि यह तारीख कुछ और हो सकती है, यह इस बात पर निर्भर करता है कि आप इसे सेट करते समय कहां हैं और आप इसे पढ़ रहे हैं, लेकिन यह इस तरह से स्थिर रहता है कि यह आपको ऐसा लगता है जैसे आप हमेशा एक ही समयक्षेत्र में हैं।
आइए कुछ कोड लिखें:
पहला - समयसीमा की अनदेखी / यूटीसी से / यूटीसी में परिवर्तित करने के हमारे 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
}