नई तिथि () क्रोम और फ़ायरफ़ॉक्स में अलग तरह से काम करती है


94

मैं Dateजावास्क्रिप्ट द्वारा दिनांक स्ट्रिंग परिवर्तित करना चाहता हूं , इस कोड का उपयोग करें:

var date = new Date('2013-02-27T17:00:00');
alert(date);

'2013-02-27T17:00:00' सर्वर से JSON ऑब्जेक्ट में UTC समय है।

लेकिन उपरोक्त कोड का परिणाम फ़ायरफ़ॉक्स और क्रोम के बीच भिन्न है:

फ़ायरफ़ॉक्स रिटर्न:

Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)

क्रोम रिटर्न:

Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time) 

यह 1 दिन अलग है, मुझे उम्मीद है कि सही परिणाम क्रोम से परिणाम होगा।

डेमो कोड: http://jsfiddle.net/xHtqa/2/

दोनों से समान परिणाम प्राप्त करने के लिए मैं इस समस्या को कैसे ठीक कर सकता हूं?


2
क्या यह उसी कंप्यूटर पर है?
एरोन डिगुल्ला

4
@ मुख्य बात यह है कि फ़ायरफ़ॉक्स नहीं होने पर क्रोम टाइमज़ोन ऑफसेट जोड़ता है
डिफ़ॉल्ट

3
@CuongLe क्या आपने यह प्रश्न देखा है: stackoverflow.com/questions/9062863/…
डिफ़ॉल्ट लोकेल

1
यह Date {Wed Feb 27 2013 17:00:00 GMT+0000 (GMT)}मेरे लिए दोनों (लिनक्स) में है।
भयंकर

1
Nitpicker का कोना: «JTC प्रारूप में UTC समय» - JSON प्रारूप? संक्षेप में, JSON के बारे में एक आम शिकायत यह है कि यह किसी भी तारीख प्रारूप को परिभाषित नहीं करता है।
अल्वारो गोंजालेज

जवाबों:


66

UTC के लिए सही प्रारूप 2013-02-27T17:00:00Z(Z ज़ुलु समय के लिए है) होगा। Zअगर सही UTC डेटाइम स्ट्रिंग प्राप्त करने के लिए उपस्थित नहीं हैं तो अपील करें ।


2
धन्यवाद। यह काम। लेकिन एक लॉग कहावत है, यह भविष्य में पदावनत हो जाएगा !!!। कृपया कोई आइडिया?
डेबोरा

1
बहुत बहुत धन्यवाद, मैं दो दिनों के लिए इस मुद्दे के साथ बैठा हूं, लेकिन इस पोस्ट ने सब कुछ हल कर दिया।
पायल जॉर्ज

30

हाँ, दुर्भाग्य से डेट-पार्सिंग एल्गोरिदम कार्यान्वयन-निर्भर हैं। के विनिर्देशन सेDate.parse (जिसका उपयोग किया जाता है new Date):

स्ट्रिंग की सामग्री के आधार पर स्थानीय समय, UTC समय या किसी अन्य समय क्षेत्र में एक समय के रूप में व्याख्या की जा सकती है। फ़ंक्शन पहले दिनांक समय स्ट्रिंग प्रारूप ( 15.9.1.15 ) में बताए गए नियमों के अनुसार स्ट्रिंग के प्रारूप को पार्स करने का प्रयास करता है । यदि स्ट्रिंग उस प्रारूप के अनुरूप नहीं है, तो फ़ंक्शन किसी भी कार्यान्वयन-विशिष्ट उत्तराधिकार या कार्यान्वयन-विशिष्ट दिनांक स्वरूपों पर वापस आ सकता है।

Dateकंस्ट्रक्टर को नहीं बनाने के लिए (हो सकता है) स्थानीय टाइमज़ोन का उपयोग करें, टाइमज़ोन जानकारी के साथ डेटाइम स्ट्रिंग का उपयोग करें, जैसे "2013-02-27T17:00:00Z"। हालांकि, ऐसा प्रारूप खोजना कठिन है जो प्रत्येक ब्राउज़र द्वारा विश्वसनीय है - आईएसओ प्रारूप IE <8 द्वारा मान्यता प्राप्त नहीं है (देखें जावास्क्रिप्ट: कौन से ब्राउज़र Date.parse के साथ ISO-8601 डेट स्ट्रिंग के पार्सिंग का समर्थन करते हैं )। बेहतर, एक यूनिक्स टाइमस्टैम्प, यानी मिलीसेकेंड के बाद का उपयोग यूनिक्स काल , या रेगुलर एक्सप्रेशन का उपयोग अपने हिस्से में नीचे स्ट्रिंग को तोड़ने के लिए और उसके बाद में उन फ़ीड Date.UTC


2
लेकिन कल्पना (15.9.1.15) वास्तव में कहती है: "एक अनुपस्थित समय क्षेत्र ऑफ़सेट का मान" Z "है - इसलिए यह कार्यान्वयन पर निर्भर नहीं होना चाहिए
sinelaw

12
ठीक है, सुधार। ES5.1 कल्पना में एक गलती की तरह दिखता है - इरादा ISO-8601 से मिलान करना था जहां लापता Z का अर्थ है स्थानीय समय (इसलिए Chrome ES5.1, फ़ायरफ़ॉक्स और IE से मेल खाता है ISO-8601)
sinelaw

@ सिनेलॉ: उस बिंदु पर आगे की जांच के लिए धन्यवाद। हालाँकि, इस बात की परवाह किए बिना कि कौन-सी युक्ति बताती है, [पुराने] ब्राउज़र अभी भी इसे अलग तरह से कर रहे हैं :-)
बर्गी

2
अजीब तरह से Date.Parse बनाम नई तारीख का उपयोग करने से मुझे लगता है कि जहां क्रोम पहले स्थानीय समय क्षेत्र में पहले से ही इलाज के बजाय स्थानीय समय क्षेत्र में तारीख बदल जाएगा इस मुद्दे को तय किया।
KingOfHypocrites

1
@ KingOfHypocrites- यह एक स्ट्रिंग के साथ डेट कंस्ट्रक्टर को कॉल करने के रूप में थोड़ा अजीब है, Date.parse का उपयोग करने के समान ही माना जाता है ।
रॉब

4

मुझे यहां एक चीज मिली। ऐसा लगता है कि मूल फ़ायरफ़ॉक्स इंस्पेक्टर कंसोल में बग हो सकता है: यदि मैं देशी इंस्पेक्टर में "नई तिथि ()" चलाता हूं, तो यह गलत टाइमज़ोन, जीएमटी लोकेल के साथ एक तारीख दिखाता है, लेकिन फायरबग एक्सटेंशन कंसोल में एक ही कमांड चला रहा है, दिनांक दिखाया मेरे सही समयक्षेत्र (GMT-3: 00) का उपयोग करता है।


-2

क्षण.js का उपयोग करके देखें। यह बहुत अच्छी तरह से और सभी ब्राउज़रों के साथ इसी तरह से चला जाता है। कई स्वरूपण विकल्पों के साथ आता है। नई तिथि ('तिथि') के बजाय क्षण ('तिथि') का उपयोग करें।


-2

ध्यान दिया कि फ़ायरफ़ॉक्स क्रोम के समान परिणाम नहीं दे रहा था। ऐसा लगता है कि आप जिस प्रारूप में kendo.toString का उपयोग करते हैं, वह एक अंतर है।

अंतिम सांत्वना परिणाम वही है जो मुझे चाहिए:

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.