2013-07-19 7 views
15

बदलने से जावास्क्रिप्ट दिनांक फ़ंक्शन रोकें तो मेरे पास आईएसओ डेट टाइम है जिसे स्ट्रिंग से डेट ऑब्जेक्ट में परिवर्तित करने की आवश्यकता है। मैं इसे स्थानीय ब्राउज़र टाइमज़ोन में परिवर्तित करने से तारीख कैसे रखूं।टाइमस्ऑन ऑफसेट

new Date('2013-07-18T17:00:00-05:00') 
Thu Jul 18 2013 18:00:00 GMT-0400 (EDT) 

मैं

गुरु जुला 18 2013 17:00:00 GMT-0500 (XX)

+1

आईएसओ स्वरूपित तिथियों का बिंदु वापस आपके टाइमज़ोन में परिवर्तित किया जाना है ... – SeinopSys

+1

आप नहीं कर सकते हैं। जावास्क्रिप्ट 'Date' वस्तु किसी भी समय क्षेत्र जानकारी एकत्र नहीं करते हैं, और जब outputting/toStringing/उन्हें प्रवेश करने वे या तो (स्पष्ट तरीकों के साथ) आपके स्थानीय समय क्षेत्र ब्राउज़र (दुर्भाग्य से डिफ़ॉल्ट) या यूटीसी का प्रयोग करेंगे। – Bergi

+0

लेकिन अगर मैं प्रदर्शित करने की कोशिश कर रहा हूं तो ब्राउज़र टाइमज़ोन में नहीं है। क्यों तारीख पर्स स्ट्रिंग नहीं कर सकते हैं और तारीख ऑब्जेक्ट को आईएसओ स्ट्रिंग में निर्दिष्ट टाइमज़ोन ऑफ़सेट पर सेट करें। – user2434674

उत्तर

0

आश्चर्य प्राप्त करना चाहते हैं, तो इस में मदद मिलेगी:

function goAheadMakeMyDate(s){ 
    var d = new Date(s); 
    // override Date.toString() 
    d.toString = function(){ return ''+s; }; 
    return d; 
} 

var example = goAheadMakeMyDate("Fri 19 July 2013 12:00:00 GMT"); 

example.toString() // returns string actually used to construct the date 
'Fri 19 July 2013 12:00:00 GMT' 

example.toLocaleString() 
'Fri Jul 19 2013 08:00:00 GMT-0400 (EDT)' 

1*example // gives seconds since epoch 
1374235200000 

अपने इनपुट के साथ :

example = goAheadMakeMyDate('2013-07-18T17:00:00-05:00') 
{ Thu, 18 Jul 2013 22:00:00 GMT toString: [Function] } 
> example.toString() 
'2013-07-18T17:00:00-05:00' 
> example.toLocaleString() // I live in GMT-4 
'Thu Jul 18 2013 18:00:00 GMT-0400 (EDT)' 
> 1*example // convert to integer date 
1374184800000 

हालांकि, अगर आप इस तिथि को संशोधित करना शुरू करते हैं, toString परिवर्तन नहीं करेगा और आपको काट देगा।

+0

इसने मेरी तिथि बनाई :-) लेकिन जब तिथि ऑब्जेक्ट संशोधित होता है तो यह काम नहीं करेगा ('setHour' या कुछ) द्वारा। – Bergi

+1

लेकिन क्या आपने 5 शॉट फायर किए थे, या वह आपका 6 वां था? वास्तव में, यह ठीक से कर रही है शायद सब कुछ तारीख को डुप्लिकेट करता है ... – Paul

-2

यदि आप लाइब्रेरी का उपयोग करने के लिए खुले हैं, तो MomentJS जावास्क्रिप्ट लाइब्रेरी समय और तिथियों को संभालने के लिए लोकप्रिय है।

+2

दिखाने चाहिए कैसे बिल्कुल momentjs बजाय सिर्फ एक लिंक की ओर इशारा करते के सवाल का जवाब देने के लिए इस्तेमाल किया जा सकता है की आवश्यकता होगी। – Seph

1

आप ऐसा करने के लिए Moment.js जैसी लाइब्रेरी का उपयोग कर सकते हैं।

स्ट्रिंग + प्रारूप पार्सिंग देखें।

http://momentjs.com/docs/#/parsing/string-format/

अपनी तिथि आपके द्वारा दी गई पार्स चाहिए निम्नलिखित हैं, लेकिन आप अपनी आवश्यकताओं के लिए इसे संशोधित करना पड़ सकता है।

var dateString = "2013-07-18T17:00:00-05:00"; 

var dateObject = moment(dateString, "YYYY-MM-DDTHH:mm:ssZ").toDate(); 

वैकल्पिक रूप से, पल की स्ट्रिंग पार्सर, जो लगता है कि यह प्रारूप आपके द्वारा दी गई है, समय की सेकंड और समय क्षेत्र के बीच एक रिक्ति के अपवाद के साथ देखते हैं।

http://momentjs.com/docs/#/parsing/string/

2

आपको Javascript के इस व्यवहार को बदल नहीं सकते, क्योंकि यह जावास्क्रिप्ट काम करने के लिए ही आसान तरीका है। क्या होता है बस जावास्क्रिप्ट समय शिफ्ट को देखता है, मिलान करने वाले टाइमस्टैम्प की गणना करता है, और फिर स्थानीय समय क्षेत्र में इस टाइमस्टैम्प के प्रतिनिधित्व के लिए ओएस से पूछता है। यहां समझने की कुंजी क्या है कि -05:00 समय क्षेत्र का संकेत नहीं है बल्कि यूटीसी से एक बदलाव है।

समय क्षेत्र जटिल जानवर हैं जो केवल मनमानी राजनीतिक निर्णय हैं। ओएस स्थानीय समय क्षेत्र में समय प्रदर्शित करने के लिए एक सेवा प्रदान करता है, लेकिन अन्य समय क्षेत्रों में नहीं। ऐसा करने के लिए आपको डीएसटी जैसी चीजों को ध्यान में रखना होगा जो काफी नरक हैं।

हमेशा समय प्रबंधन के साथ, इस समस्या से निपटने का एकमात्र सभ्य तरीका समर्पित पुस्तकालय का उपयोग करना है। जावास्क्रिप्ट में, आपको Moment.js और Moment.Timezone.js बहुत उपयोगी मिलेगा।

उदाहरण http://codepen.io/Xowap/pen/XKpKZb?editors=0010

document.write(moment('2013-07-18T17:00:00-05:00').tz('America/New_York').format('LLL')); 

एक बोनस के रूप में, आप Moment.js से सुविधाओं को पार्स स्वरूपण की एक टन प्राप्त /।

कृपया यह भी ध्यान दें कि जब तक आप आईएसओ 8601 का उपयोग करते हैं, तब तक आपकी तिथि को सटीक पल पर पिन किया जा सकता है, और इस प्रकार आपकी पसंद के किसी भी समय क्षेत्र में प्रदर्शित किया जा सकता है। दूसरे शब्दों में, जेएस आपकी तिथि को "कनवर्ट करना" कोई फर्क नहीं पड़ता।

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