ক্লায়েন্ট-সাইডে টাইমজোনটি সেট করা যাই হোক না কেন আমার সমাধান তারিখটিকে একই রাখে। কেউ এটি দরকারী খুঁজে পাবেন।
আমার ব্যবহারের কেস:
আমি একটি টুডো অ্যাপ তৈরি করছি, যেখানে আপনি আপনার কাজের তারিখ নির্ধারণ করেছেন। আপনি যে টাইমজোনেই থাকুন না কেন এই তারিখটি স্থির থাকতে হবে।
উদাহরণ। আপনি 25 শে জুন সকাল 8 টায় আপনার বন্ধুকে কল করতে চান।
আপনি চীনে থাকাকালীন 5 দিন আগে (20 শে জুন) এই কাজটি তৈরি করেন।
তারপরে, একই দিনে, আপনি কয়েক দিনের জন্য নিউইয়র্কের ফ্লাইটে যান।
তারপরে ২৫ শে জুন, আপনি যখন নিউইয়র্কে রয়েছেন, তখন আপনি সকাল সাড়ে at টায় ঘুম থেকে ওঠেন (যার অর্থ আপনার 30 মিনিটের মধ্যে টাস্কের বিজ্ঞপ্তিটি পাওয়া উচিত (এমনকি এটি তৈরির সময় আপনি যেখানে ছিলেন সেখানে ইতিমধ্যে দুপুর দেড়টায়) কাজের)
তাই কাজটি সময় অঞ্চলটিকে উপেক্ষা করছে। এর অর্থ 'আমি যে টাইমজোন থাকব তা সকাল আটটায় করতে চাই'।
আমি যা করি তা বলা যাক 'আমি ধরে নিলাম আপনি সর্বদা লন্ডনের টাইমজোন - ইউটিসি'তে রয়েছেন।
এর অর্থ কী - যখন ব্যবহারকারী তার / তার টাইমজোনটিতে কিছু তারিখ রাখে - আমি এই তারিখটিকে ইউটিসিতে একই তারিখে রূপান্তর করি। অর্থাত। আপনি চীনে সকাল 8 টা বাছাই করেন তবে আমি এটি ইউটিসিতে সকাল 8 টায় রূপান্তর করি।
তারপরে - পরের বার আপনি অ্যাপটি খোলেন - আমি ইউটিসিতে সংরক্ষিত তারিখটি পড়েছি এবং এটি আপনার বর্তমান টাইমজোনটিতে একই তারিখে রূপান্তর করি - যেমন eg আমি নিউ ইয়র্কের টাইমজোনটিতে ইউটিসিতে সকাল 8 টায় 8 এ রূপান্তর করি।
এই সমাধানটির অর্থ হ'ল তারিখটি অন্য কিছু বোঝাতে পারে যখন আপনি এটি নির্ধারণের সময় কোথায় ছিলেন এবং আপনি কোথায় পড়ছেন, তবে এটি এমনভাবে স্থির থাকে যা আপনি সর্বদা একই সময় অঞ্চলে থাকায় 'অনুভূত' হয়।
আসুন কিছু কোড লিখি:
প্রথম - সময় অঞ্চলকে উপেক্ষা করে / ইউটিসি থেকে রূপান্তর করার জন্য আমাদের কাছে দুটি প্রধান ফাংশন রয়েছে:
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
}