उपयोगकर्ताओं को स्थानीय समय क्षेत्र में मोमेंट.जेएस की तारीख कैसे बदलें?


84

मैं Moment.js और Moment-Timezone फ्रेमवर्क का उपयोग करता हूं, और एक Moment.js दिनांक ऑब्जेक्ट है जो स्पष्ट रूप से UTC टाइमज़ोन में है। मैं इसे ब्राउज़र के वर्तमान समय क्षेत्र में कैसे बदल सकता हूं?

var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???

इसलिए यह ठीक होगा यदि मैं उपयोगकर्ताओं को स्थानीय समय क्षेत्र का पता लगा सकता हूं; या वैकल्पिक रूप से मैं दिनांक ऑब्जेक्ट को किसी अन्य डेटा ऑब्जेक्ट में परिवर्तित करना चाहूंगा, जो "स्थानीय समय-क्षेत्र" का उपयोग करता है, कोई फर्क नहीं पड़ता कि वास्तव में क्या है।

जवाबों:


139

इसके लिए आपको पल-पल के समय का उपयोग करने की आवश्यकता नहीं है। मुख्य पल.जेएस लाइब्रेरी में यूटीसी और स्थानीय समय क्षेत्र के साथ काम करने के लिए पूर्ण कार्यक्षमता है।

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).local();

वहाँ से आप अपने द्वारा अपेक्षित किसी भी कार्य का उपयोग कर सकते हैं:

var s = localDate.format("YYYY-MM-DD HH:mm:ss");
var d = localDate.toDate();
// etc...

ध्यान दें कि पास होने से testDateUtc, जो कि एक momentऑब्जेक्ट है, वापस moment()कंस्ट्रक्टर में जाता है, यह एक क्लोन बनाता है । अन्यथा, जब आप कॉल करते हैं .local(), तो यह केवल testDateUtcमूल्य के बजाय मूल्य को भी बदल देगा localDate। क्षण- भंगुर हैं

यह भी ध्यान दें कि यदि आपके मूल इनपुट में टाइम ज़ोन ऑफ़सेट जैसे +00:00या Z, तो आप सीधे इसे पार्स कर सकते हैं moment। आपको उपयोग करने की आवश्यकता नहीं है .utcया .local। उदाहरण के लिए:

var localDate = moment("2015-01-30T10:00:00Z");

4
आपको इस बात की जानकारी होनी चाहिए कि यह विधि डीएसटी ऑफसेट को ध्यान में नहीं रखती है, यह moment-timezoneपुस्तकालय का उपयोग करने के लिए सुरक्षित है
Jaime Agudo

2
@ जय सच नहीं। localवास्तव में डीएसटी को ध्यान में रखता है।
मैट जॉनसन-पिंट

आप से अपने स्वयं के उदाहरण के लिए अनुवाद पर देख सकते हैं ESTकरने के लिए CET, मैं कल एक उदाहरण डाल देता हूँ अगर आप की तरह चाहते हैं NY-> Madrid। मैं प्रतिसाद स्वीकार करूँगा :)
Jaime Agudo

1
आप उस पल को सही कर रहे हैं जो उस प्रकार के रूपांतरण को पल-पल क्षेत्र के बिना नहीं कर सकता। हालांकि, यह ठीक से यूटीसी और स्थानीय के बीच बदल सकता है, जो कि ओपी ने पूछा है।
मैट जॉनसन-पिंट

2
स्थानीय नियम ब्राउज़र से आते हैं। इसलिए जब तक स्थानीय समय क्षेत्र में डीएसटी शामिल है, तब तक पल इसका उपयोग करेगा।
मैट जॉनसन-पिंट

23
var dateFormat = 'YYYY-DD-MM HH:mm:ss';
var testDateUtc = moment.utc('2015-01-30 10:00:00');
var localDate = testDateUtc.local();
console.log(localDate.format(dateFormat)); // 2015-30-01 02:00:00
  1. अपने दिनांक प्रारूप को परिभाषित करें।
  2. एक क्षण ऑब्जेक्ट बनाएं और ऑब्जेक्ट पर सही करने के लिए UTC ध्वज सेट करें।
  3. मूल क्षण ऑब्जेक्ट से परिवर्तित स्थानीयकृत क्षण ऑब्जेक्ट बनाएँ।
  4. स्थानीयकृत क्षण ऑब्जेक्ट से एक स्वरूपित स्ट्रिंग लौटें।

देखें: http://momentjs.com/docs/#/manipulating/local/


यह उत्तर और भी बेहतर होगा यदि यह समझाया जाए कि क्यों काम करता है, शायद प्रलेखन के संदर्भ में। इसके अलावा, आप यह भी बता सकते हैं कि यह उत्तर मार्च में पोस्ट किए गए से अलग कैसे है ...
Heretic Monkey

@AndrewHenderson, स्थानीय मशीन समय से एक घंटे आगे है। यह क्यों हो रहा है?
रमेश पापागंती

@RameshPapaganti शायद डेलाइट सेविंग? उदाहरण के लिए पीडीटी बनाम पीएसटी। क्षण विशेष रूप से स्थानीयकरण की बात करते समय संस्करणों के बीच एपीआई को बदलने के लिए जाना जाता है। मुझे पता है अगर तुम कारण पाया।
एंड्रयूहेंडर्सन

6

यहाँ मैंने क्या किया है:

var timestamp = moment.unix({{ time }});
var utcOffset = moment().utcOffset();
var local_time = timestamp.add(utcOffset, "minutes");
var dateString = local_time.fromNow();

{{ time }}Utc टाइमस्टैम्प कहाँ है।


3

UtcOffset फ़ंक्शन का उपयोग करें।

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).utcOffset(10 * 60); //set timezone offset in minutes
console.log(localDate.format()); //2015-01-30T20:00:00+10:00
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.