Moment: Date.prototype.toString () से टाइमज़ोन संक्षिप्त नाम खोजने में असमर्थ

को निर्मित 6 फ़र॰ 2012  ·  33टिप्पणियाँ  ·  स्रोत: moment/moment

नमस्कार, मैं एक मंच के माध्यम से पल भर में आया। एक इकाई के माध्यम से मैंने अपना रास्ता क्लिक किया, जब मैं इकाई परीक्षण में आया - जो 2 परीक्षणों में विफल रहा, जो मैं यहां रिपोर्ट करना चाहता हूं:

उपभोक्ता अभिकर्ता:
मोज़िला / 5.0 (विंडोज NT 6.1; WOW64) AppleWebKit / 535.7 (KHTML, जैसे गेको) क्रोम / 16.0.912.77 सफारी / 535.7 (क्रोम 16.0.912.77 मीटर)

समय क्षेत्र:
यूटीसी +1

विफल परीक्षण (# 28):
http://pastebin.com/bQsDuxdH

* टाइमवुड द्वारा संपादित शीर्षक

सबसे उपयोगी टिप्पणी

बेवकूफ सवाल: एक पूरी तरह से नया पुस्तकालय क्यों? क्या किसी की तारीख और समय को संभालने की ज़रूरतों को हल करने का क्षण नहीं है? जबकि डेटा फाइलें अंतरिक्ष की एक गैर-तुच्छ मात्रा में जोड़ती हैं (और मैं उन्हें अलग कर सकता हूं), नया पुस्तकालय स्वयं <2k है, इसलिए अंतरिक्ष इसे अलग करने का कारण नहीं लगता है।

यह सिर्फ इस तरह का दुखद लगता है कि कोई व्यक्ति जो बस एक टाइमज़ोन के साथ एक तारीख स्ट्रिंग उत्पन्न करना चाहता है, उसे दो अलग-अलग पुस्तकालयों और एक डेटा फ़ाइल को डाउनलोड करना होगा जो कि जावास्क्रिप्ट को अंतर्निहित होना चाहिए।

इसके अलावा, मैं एक साधारण तारीख स्ट्रिंग उत्पन्न करने के लिए पुस्तकालयों के इस नए समामेलन का उपयोग कैसे करूं? इससे पहले कि मैं उत्पन्न कर सकता था:

Sun, 06 Nov 1994 08:49:37 GMT

साथ में:

moment().format('ddd, DD MMM YYYY HH:mm:ss z');

लेकिन अब मैं उलझन में हूं कि मैं कैसे "z" प्रारूपण विकल्प के बिना ऐसा करने वाला हूं। किसी भी सहायता की सराहना की जाएगी।

सभी 33 टिप्पणियाँ

हम्म, ऐसा लगता है कि टाइमज़ोन संक्षिप्त नाम विफल हो रहा है। रिमोट डिबगिंग करने के लिए क्षमा करें, लेकिन क्रोम में निम्नलिखित का आउटपुट क्या है?

new Date().toString()

इसके अलावा, उस समय का नाम क्या है जिसमें आप हैं?

मुझे यूनिट-परीक्षणों में समान त्रुटि मिलती है और मैं यूटीसी + 1 (पहले जीएमटी + 1 के रूप में जाना जाता है) में भी हूं।

नई तिथि () .String () प्रिंट "Sat Feb 11 2012 2012 02:15:10 GMT + 0100" फ़ायरफ़ॉक्स 10 में, "Sat Feb 11 2012 02:18:29 GMT + 0100 (W. यूरोप मानक समय)" क्रोम में इंटरनेट एक्सप्लोरर 9 में 16 और "शनि फरवरी 11 02:18:59 UTC + 0100 2012"

हम्म, मुझे इस बात का डर था। समस्या यह है कि Date.prototype.toString ऐसे अलग-अलग परिणाम देते हैं। यह केवल समय क्षेत्र का नाम (PST, CST, EST, आदि) प्राप्त करने के लिए है। यदि यह विधि किसी भी समयक्षेत्र जानकारी को वापस नहीं कर रही है (जैसा कि एफएफ 10 और आईई 9 के साथ मामला है, तो इसे प्राप्त करने का कोई तरीका नहीं है।

शायद यह ह्रास का समय है? या डॉक्स में सिर्फ इस मुद्दे पर ध्यान देना स्वीकार्य है?

4318 पास हुए, 2 फेल हुए। 2715 मिली सेकेंड।

मोज़िला / 5.0 (विंडोज़ एनटी 6.1) AppleWebKit / 535.11 (KHTML, जैसे गेको) क्रोम / 17.0.963.56 सफारी / 535.11

UTC +2 (कीव, यूक्रेन)

प्रारूप समयक्षेत्र 2 पारित, 2 विफल।
---> "पीएसटी" जैसा कुछ
अभिकथन: ---> "पीएसटी" जैसा कुछ
Object.ok (http://momentjs.com/js/tests.js?_=120203_183019:1526:39) पर
http://momentjs.com/js/tests.js?_=120203_183019:2413:14 पर
Object.runTest (http://momentjs.com/js/tests.js?_=120203_183019:1702:9) पर
http://momentjs.com/js/tests.js?_=120203_183019:1748:25 पर
http://momentjs.com/js/tests.js?_=120203_183019:1006:13 पर
http://momentjs.com/js/tests.js?_=120203_183019:616:13 पर
http://momentjs.com/js/tests.js?_=120203_183019:627:25 पर
http://momentjs.com/js/tests.js?_=120203_183019:1008:17 पर
http://momentjs.com/js/tests.js?_=120203_183019:1589:17 पर
---> "पीएसटी" जैसा कुछ
अभिकथन: ---> "पीएसटी" जैसा कुछ
Object.ok (http://momentjs.com/js/tests.js?_=120203_183019:1526:39) पर
http://momentjs.com/js/tests.js?_=120203_183019:2414:14 पर
Object.runTest (http://momentjs.com/js/tests.js?_=120203_183019:1702:9) पर
http://momentjs.com/js/tests.js?_=120203_183019:1748:25 पर
http://momentjs.com/js/tests.js?_=120203_183019:1006:13 पर
http://momentjs.com/js/tests.js?_=120203_183019:616:13 पर
http://momentjs.com/js/tests.js?_=120203_183019:627:25 पर
http://momentjs.com/js/tests.js?_=120203_183019:1008:17 पर
http://momentjs.com/js/tests.js?_=120203_183019:1589:17 पर
+02: 00 ---> "+07: 30" जैसा कुछ
+0200 ---> "+0700" जैसा कुछ

मुझे भी यही असफलता मिलती है # 28. मेरा टाइमजोन GMT -3 है।

एजेंट:
मोज़िला / 5.0 (विंडोज NT 6.1; WOW64) AppleWebKit / 535.11 (KHTML, जैसे गेको) क्रोम / 17.0.963.66 सफारी / 535.11

असफल परीक्षण: http://pastebin.com/dsWHMF3h

।:।

एजेंट:
मोज़िला / 5.0 (विंडोज NT 6.1; WOW64; आरवी: 10.0.2) गेको / 20100101 फ़ायरफ़ॉक्स / 10.0.2
या
मोज़िला / 5.0 (संगत; MSIE 9.0; Windows NT 6.1; WOW64; त्रिशूल / 5.0; SLCC। .NET .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; मीडिया सेंटर) 6.0। NET4। 0C; Zune 4.7; .NET4.0E)

असफल परीक्षण: http://pastebin.com/6t6JP9fu

तो ऐसा लगता है कि यह UTC + 1, UTC + 2 और UTC-3 में हो रहा है।

दुर्भाग्य से, अब इसे ठीक करने का एक तरीका है। यह Date().toString() आउटपुट को हैक करने पर निर्भर करता है, और यदि उस स्ट्रिंग में कोई समय क्षेत्र की जानकारी उपलब्ध नहीं है, तो उस जानकारी को प्राप्त करने का कोई तरीका नहीं है।

मैं इस सुविधा को कम करने जा रहा हूं और शायद एक ऐसा प्लगइन बनाऊंगा जिसमें अधिक विश्वसनीय (हालांकि शायद कम सटीक) परिणाम हैं। यह शायद https://github.com/mde/timezone-js जैसा कुछ होना चाहिए

z zz टोकन 1.6.0 के रूप में पदावनत किए जा रहे हैं। मैं इस मुद्दे को बंद कर रहा हूं।

नोड के बारे में क्या है। क्या इस वातावरण में z zz विश्वसनीय हैं या नहीं?

उन्हें आधिकारिक तौर पर हटा दिया गया है, इसलिए वे संस्करण 1.6.0 के रूप में काम नहीं करेंगे।

इससे पहले कोड के संस्करणों के लिए, मुझे लगता है कि परिणाम भी असंगत होंगे, क्योंकि नोड V8 का उपयोग करता है और ऊपर असंगत परिणामों में से कुछ क्रोम में हैं, जो V8 का भी उपयोग करता है।

धन्यवाद। तो Thu Jan 10 2013 22:54:11 GMT+0100 (CET) जैसी एक स्ट्रिंग के लिए, जो मैं कर रहा था उसे समाप्त करने के लिए टाइमज़ोन स्ट्रिंग (यहाँ (CET) अग्रणी स्थान के साथ) निकाल रहा हूँ और यहाँ केवल समयसीमा जानकारी छोड़ रहा हूँ (यहाँ +0100 )। क्या आपको लगता है कि यह क्षण के लिए पर्याप्त है। जेएस या क्या मैं विसंगतियों का जोखिम उठाता हूं?

हम्म, मुझे यकीन नहीं है कि आप क्या करना चाह रहे हैं, क्या आप CET या +0100 पाने की कोशिश कर रहे हैं?

+0100 ZZ टोकन (कैपिटलाइज़ेशन पर ध्यान दें) के माध्यम से समर्थित है और पार्स और स्वरूपण करते समय ठीक काम करता है।

CET घटाया गया क्योंकि हम मज़बूती से इसे Date.toString । हालांकि, जैसा कि हम Date.getTimezoneOffset +0100 के लिए उपयोग करते हैं, समर्थन बहुत अधिक सुसंगत है।

जैसा कि आप कहते हैं, ZZ +0100 के लिए और स्ट्रिंग से पार्स को हटाने का उपयोग कर रहा हूँ। क्या इस का कोई मतलब निकलता है ?

मेरी क्षमायाचना, मैं अभी भी नहीं समझ पा रहा हूं कि समस्या क्या है। क्या आप Thu Jan 10 2013 22:54:11 GMT+0100 (CET) पार्स करने की कोशिश कर रहे हैं? आपको निम्नलिखित कार्य करने में सक्षम होना चाहिए।

moment('Thu Jan 10 2013 22:54:11 GMT+0100 (CET)', 'ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');

यह वही है जो मैं अंत में कर रहा हूं। ऐसा लगता है कि आप पुष्टि कर रहे हैं कि मैं सही काम कर रहा हूं। मेरी क्षमा याचना यदि मैं स्पष्ट नहीं था, तो उत्तर के लिए धन्यवाद!

कोई दिक्कत नहीं है!

@ hughanderson4 , मुद्दा यह था कि ब्राउज़र हमेशा Date.prototype.toString टाइमज़ोन संक्षिप्त नाम नहीं देते हैं। क्योंकि हम मज़बूती से टाइमज़ोन संक्षिप्त नाम नहीं पा सकते थे, इसलिए इसे हटा दिया गया था।

तब से, क्षण-समय के लिए समय- क्षेत्र समर्थन जोड़ने के लिए

कोई व्यक्ति स्थानीय समय और क्षण को संक्षिप्त नाम (क्षण) में कैसे परिवर्तित करेगा?

बेवकूफ सवाल: एक पूरी तरह से नया पुस्तकालय क्यों? क्या किसी की तारीख और समय को संभालने की ज़रूरतों को हल करने का क्षण नहीं है? जबकि डेटा फाइलें अंतरिक्ष की एक गैर-तुच्छ मात्रा में जोड़ती हैं (और मैं उन्हें अलग कर सकता हूं), नया पुस्तकालय स्वयं <2k है, इसलिए अंतरिक्ष इसे अलग करने का कारण नहीं लगता है।

यह सिर्फ इस तरह का दुखद लगता है कि कोई व्यक्ति जो बस एक टाइमज़ोन के साथ एक तारीख स्ट्रिंग उत्पन्न करना चाहता है, उसे दो अलग-अलग पुस्तकालयों और एक डेटा फ़ाइल को डाउनलोड करना होगा जो कि जावास्क्रिप्ट को अंतर्निहित होना चाहिए।

इसके अलावा, मैं एक साधारण तारीख स्ट्रिंग उत्पन्न करने के लिए पुस्तकालयों के इस नए समामेलन का उपयोग कैसे करूं? इससे पहले कि मैं उत्पन्न कर सकता था:

Sun, 06 Nov 1994 08:49:37 GMT

साथ में:

moment().format('ddd, DD MMM YYYY HH:mm:ss z');

लेकिन अब मैं उलझन में हूं कि मैं कैसे "z" प्रारूपण विकल्प के बिना ऐसा करने वाला हूं। किसी भी सहायता की सराहना की जाएगी।

इसलिए, यह सुनिश्चित करने के लिए कि मुझे समझ में आ रहा है: पदावनत 'z' प्रारूप के लिए कोई प्रतिस्थापन नहीं है?

यदि मेरे पास ISO-8601 प्रारूप में टाइमस्टैम्प है, जैसे:

2014-07-25T18:00:00-04:00

और मैं इस टाइमस्टैम्प को निम्न के रूप में प्रदर्शित करना चाहता हूं:

6:00 PM EST

क्या अब इस प्रारूपण का समर्थन नहीं करता है? सभी टाइमज़ोन डेटा मेरे टाइमस्टैम्प में शामिल हैं, और मैं केवल किसी भी तरह से टाइमज़ोन को परिवर्तित किए बिना इसे सीधे प्रदर्शित करना चाहता हूं।

इसमें वास्तव में समयक्षेत्र शामिल नहीं है। कई समयक्षेत्र के नाम हो सकते हैं जो समान यूटीसी ऑफसेट के अनुरूप हैं, खासकर जब डीएसटी को अलग करने की संभावनाओं पर विचार किया जाता है। आप "UTC-4: 00" से अनुमान नहीं लगा सकते हैं कि टाइमजोन ईएसटी है।

स्पष्टीकरण के लिए, z फॉर्मेटर अभी भी एक विशिष्ट क्षेत्र के साथ क्षण-समयक्षेत्र का उपयोग करते

बस अब यह उल्लेख - यदि आप उपयोग करते हैं
new Date().toTimeString()
जहाँ तक मैंने कोशिश की है, आप सभी ब्राउज़रों में समान परिणाम प्राप्त करते हैं।

इसका मतलब यह है कि आप संभवतः इस स्ट्रिंग का उपयोग टाइमज़ोन निकालने के लिए कर सकते हैं, नहीं?

नमस्ते, मैं उस प्रारूप के ऊपर देखता हूं ('z') पदावनत। डॉक्स में भी, मुझे लगता है कि इसे 1.6.0 से हटा दिया गया है। मैं अब 2.11.0 का उपयोग कर रहा हूं, मैं ऑफसेट के आधार पर टाइमज़ोन (PST / PDT) प्रदर्शित करने के लिए 'z' का उपयोग कर सकता हूं।
क्या मुझे अब अपने कोड में इस 'z' का उपयोग नहीं करना चाहिए? क्या आप कृपया - / + 8 के बजाय PST प्रदर्शित करने का सटीक विकल्प बता सकते हैं

@themakshter - नहीं, आपको सभी ब्राउज़रों में समान परिणाम नहीं मिलता है। ओएस, ब्राउज़र संस्करण, और भाषा इसमें भारी रूप से खेलते हैं - और कल्पना में कोई निरंतरता की आवश्यकता नहीं है।

@ शोभना 16 - यदि आप moment().format('z') , तो यह हमेशा "" लौटाएगा।

यदि आप क्षण-समय-क्षेत्र का उपयोग कर रहे हैं, और moment.tz('America/Los_Angeles').format('z') जैसा कुछ करते हैं, तो आपको एक वैध प्रतिक्रिया मिलेगी।

z पल-समय के साथ ठीक है। यह एक सादे पल पर कुछ भी नहीं करता है।

एमजे टिप्पणियों के लिए धन्यवाद। हाँ, मैं केवल समय-समय के साथ 'z' का उपयोग कर रहा हूँ। ओके कूल मेरा कोड 'z ’के साथ रहेगा। !

बस जोड़ने के लिए एक नोट, समय-समय पर 0.5.0 के रूप में, आप स्थानीय समय क्षेत्र में _guess_ कर सकते हैं, जो इस दरवाजे को खोलता है:

var abbreviation = moment.tz(moment.tz.guess()).format('z');

यह ठीक है, लेकिन ध्यान रखें कि:

  1. यह सिर्फ एक अनुमान है। यह गलत अनुमान हो सकता है।
  2. यदि यह गलत अनुमान लगाता है, तो अभी भी संभावना है कि संक्षिप्त नाम सही हो सकता है, क्योंकि कई समान समय क्षेत्र समान संक्षिप्ताक्षरों का उपयोग करेंगे, जैसे कि Europe/Paris और Europe/Berlin दोनों CET उपयोग करें CEST
  3. हालाँकि, इसकी कोई गारंटी नहीं है। यदि यह गलत लगता है, तो आप गलत संक्षिप्त नाम प्रस्तुत कर सकते हैं।

हम क्षण-क्षण को भी मान सकते हैं, जैसे कि यदि समय-समय पर उपलब्ध हो, तो यह z फॉर्मेटर को फिर से सक्षम करने के लिए स्वचालित रूप से ऐसा करने का प्रयास कर सकता है। हालांकि वर्तमान में ऐसा नहीं हो रहा है।

var abbreviation = moment.tz(moment.tz.guess()).format('zz'); काम नहीं करता है (दो z s के साथ)। क्या मैं केवल "EDT" प्राप्त करने में सक्षम हूं और "पूर्वी डेलाइट टाइम" नहीं?

धन्यवाद!

आह, मैंने पाया कि http://momentjs.com/timezone/docs/#/using -timezones / स्वरूपण / कहते हैं: लंबे प्रपत्र नाम प्रदान करने के लिए, आप ओवरराइड कर सकते हैं moment.fn.zoneName और प्रयोग zz टोकन।
[and much more...]
धन्यवाद।

हालांकि एक बात भ्रामक है। वर्तमान संस्करण में (या जैसा कि यह कहा गया है " 1.6.0 के रूप में") अलग-अलग पल-टाइमज़ोन का उपयोग किए बिना टाइमज़ोन दिखाने का कोई तरीका नहीं है। लेकिन जब मैं moment(...).toString() करता हूं तो यह उदाहरण के लिए अंत में GMT दिखाता है। तो क्या यह एक बग है, या एक समाधान एक और कार्यक्षमता का विरोधाभासी है?

हालांकि एक बात भ्रामक है। वर्तमान संस्करण में (या जैसा कि यह कहा गया है " 1.6.0 के रूप में") अलग-अलग पल-टाइमज़ोन का उपयोग किए बिना टाइमज़ोन दिखाने का कोई तरीका नहीं है। लेकिन जब मैं moment(...).toString() करता हूं तो यह उदाहरण के लिए अंत में GMT दिखाता है। तो क्या यह एक बग है, या एक समाधान एक और कार्यक्षमता का विरोधाभासी है?

मुझे लगता है कि समस्या विश्वसनीयता है। क्षण को स्थानीय तिथि ऑब्जेक्ट से सही समय क्षेत्र को निकालने के लिए मज़बूती से नहीं किया जा सकता है, इसलिए यह अपने स्वरूपण में z/zz का समर्थन नहीं करता है।

ऊपर चर्चा की गई:
https://github.com/moment/moment/issues/162#issuecomment -4060027

यह हमारे लिए "GMT" पाठ प्राप्त करने के लिए काम किया गया है क्योंकि z को हटा दिया गया है

const dateGenerated = moment("2020-05-20 08:15:25");
const localDateGenerated = dateGenerated.local().format('DD MMM YYYY hh:mm A') + ' ' + String(dateGenerated.local()._d).split(' ')[5];

यह 20 May 2020 08:15 AM GMT+0300" उत्पन्न करेगा

क्या यह पृष्ठ उपयोगी था?
0 / 5 - 0 रेटिंग्स