मैं कुछ के लिए एक अवधि टिकर प्रदर्शित करने का प्रयास कर रहा हूँ। लंदन के समय में प्रारंभ समय हमेशा है। यह इंग्लैंड/उसी समय क्षेत्र में लोगों के लिए पूरी तरह से काम करता है, हालांकि जब अन्य समय क्षेत्र में लोग अवधि को देखते हैं तो यह गलत मान प्रदर्शित करता है (यदि आप इंग्लैंड के पीछे एक समय क्षेत्र में हैं => नकारात्मक मान/बहुत छोटे मान, समय क्षेत्र आगे = > मान बहुत बड़ा है)।

इसका मेरा समाधान पल-समय क्षेत्र का उपयोग करना था। मैंने पल टाइमज़ोन डेटा को सही ढंग से जोड़ा है मैंने इस टाइमज़ोन डेटा का उपयोग करने का प्रयास किया है (कोड को सरल और आसान पठनीयता के लिए अलग-अलग लाइनों में अलग किया गया है):

let londonTimeNow = moment().tz('Europe/London'),
jobStartTime = moment(job.start, 'DD/MM/YYYY HH:mm:ss'),
diff = londonTimeNow.diff(jobStartTime);
duration = moment.duration(diff).format('HH:mm:ss', {trim: false});

मैं उम्मीद कर रहा था कि यह तब लंदन में वर्तमान समय प्राप्त करेगा और प्रारंभ समय की तुलना करेगा चाहे आप दुनिया में कहीं भी हों। हालांकि, ऐसा लगता है कि diff फ़ंक्शन समय को उपयोगकर्ता के कंप्यूटर समय में बदल देता है। मैंने एक स्ट्रिंग होने के लिए londonTimeNow को स्वरूपित करने का प्रयास किया, लेकिन फिर diff फ़ंक्शन काम नहीं करता है। ध्यान दें, मैंने डिबग किया है और moment().tz() सही ढंग से काम कर रहा है, मैंने अन्य समय क्षेत्रों के साथ प्रयास किया है और इसे निर्दिष्ट क्षेत्र में सही समय मिलता है।

कोई विचार?

संपादित करें: ऐसा लगता है कि मैं इसे 'लंदनटाइम नाउ' की ऑफसेट संपत्ति को 0 पर मैन्युअल रूप से सेट करके काम कर सकता हूं। हालांकि यह मुझे बिल्कुल सही नहीं लगता है। मैं ऐसे समाधान को प्राथमिकता दूंगा जो हैक की तरह कम लगता है।

1
DeejC 14 जिंदा 2019, 14:31

2 जवाब

सबसे बढ़िया उत्तर

आपको उसी समय क्षेत्र का उपयोग करते हुए जिस तरह से आप लंदन के समय की घोषणा करते हैं, उसी तरह आपको नौकरी शुरू करने का समय निर्दिष्ट करना चाहिए:

jobStartTime = moment.tz(jobStart, 'DD/MM/YYYY HH:mm:ss','Europe/London'),

यह समान समय क्षेत्र का उपयोग करके कार्य प्रारंभ समय निर्धारित करेगा।

2
phuzi 14 जिंदा 2019, 14:51

क्या आप अपेक्षित आउटपुट जोड़ सकते हैं या निर्दिष्ट कर सकते हैं कि 'अंतर समय को परिवर्तित करता है' से आपका क्या मतलब है? अंतर का परिणाम एक अवधि है और किसी भी समय क्षेत्र में नहीं है।

इसके अलावा, समस्या कार्य प्रारंभ के लिए समय क्षेत्र का उपयोग न करने में प्रतीत होती है। ये कोशिश करें:

let londonTimeNow = moment().tz('Europe/London'),
jobStartTime = moment(job.start, 'DD/MM/YYYY HH:mm:ss').tz('Europe/London'),
diff = londonTimeNow.diff(jobStartTime);
duration = moment.duration(diff).format('HH:mm:ss', {trim: false});
1
Mikhail Litvinov 14 जिंदा 2019, 14:43