2012-06-25 11 views
6

मैंने फ़ायरफ़ॉक्स स्क्रैचपैड में निम्न कोड का परीक्षण किया और दिलचस्प परिणाम मिला?जावास्क्रिप्ट नई तारीख अलग-अलग तारीख शैली की ओर अलग-अलग व्यवहार करती है?

var date=new Date("2012-05-12"); 
var date2 = new Date("05/12/2012"); 
date; 
/* 
Fri May 11 2012 17:00:00 GMT-0700 (Pacific Daylight Time) 
*/ 
date2; 
/* 
Sat May 12 2012 00:00:00 GMT-0700 (Pacific Daylight Time) 
*/ 

दो तिथियां अलग-अलग हैं। जाहिर है यह टाइमज़ोन मुद्दे के कारण है। मुझे क्या चाहिए दिनांक 2 परिणाम है। मैं जेएस इंजन को आईएसओ दिनांक शैली का सही तरीके से कैसे व्यवहार कर सकता हूं?

+0

पहले उदाहरण में अग्रणी शून्य को हटाएं। 'var date = new date (" 2012-5-12 ");' – j08691

+0

@ j08691 जिसके परिणामस्वरूप कम से कम फ़ायरफ़ॉक्स में "अमान्य तिथि" त्रुटि होती है। – Pointy

+0

@ पॉइंटी - अच्छी पकड़, मैंने क्रोम में परीक्षण किया। – j08691

उत्तर

2

मुझे लगता है कि मुद्दा यह है कि "2012-05-12" स्ट्रिंग को आईएसओ 8601 दिनांक माना जाता है, जबकि "05/12/2012" एक आरएफसी 2822 दिनांक है। आईएसओ प्रारूप में, टाइमज़ोन की कमी यूटीसी का तात्पर्य है। 12 मई को सुबह आधी रात को कैलिफोर्निया (या जहां भी आप हैं) में यह शाम 7 बजे है।

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

आप अंतर देखेंगे अगर आप Date.parse() करने के लिए उन तार पारित कर सकते हैं।

आरएफसी दिनांक प्रारूप में एक स्पष्ट समय क्षेत्र शामिल हो सकता है, लेकिन आईएसओ प्रारूप नहीं कर सकता है। (ठीक है, यह है, लेकिन ब्राउज़रों ध्यान देना कर सकते हैं नहीं है, और जाहिरा तौर पर आईई उन सब पर संभाल नहीं करता है।)

संपादित — यहाँ एक सरल है (गूंगा, कोई त्रुटि जाँच) समारोह है कि आप दे देंगे कि 3-इस भाग को ISO रूप से एक तिथि:

function isoDate(str) { 
    var rv = null; 
    str.replace(/^(\d\d\d\d)-(\d\d)-(\d\d)$/, function(_, yr, mn, dy) { 
    rv = new Date(parseInt(yr, 10), parseInt(mn, 10) - 1, parseInt(dy, 10)); 
    }); 
    return rv; 
} 
+0

हाँ आप जो जवाब देते हैं वह वास्तव में मैं क्या सोच रहा हूं। लेकिन कोई समाधान ...? – NSF

+0

@NSF अच्छी तरह से आप आईएसओ डेट प्रारूप को स्वयं पार्स कर सकते हैं, और फिर तिथि को स्पष्ट रूप से बना सकते हैं। यदि आप संख्यात्मक के साथ एक तिथि बनाते हैं, तो इसे स्थानीय समय क्षेत्र मानना ​​चाहिए। – Pointy

0

मानक रखकर Date() के साथ, आप आईएसओ दिनांक या दिनांक एक कार्यान्वयन पर निर्भर प्रारूप में, एक एक कार्यान्वयन निर्भर तरीके से पार्स कर सकते हैं। कुछ और विश्वसनीय पाने के लिए, एक उपयुक्त लाइब्रेरी का उपयोग करें जो कुछ ज्ञात स्वरूपों में तिथियों का विश्लेषण कर सकता है।

संबंधित मुद्दे