डिफ़ॉल्ट रूप से, मोमेंटजेएस स्थानीय समय में पार्स करता है। यदि केवल एक तारीख स्ट्रिंग (बिना समय के) प्रदान की जाती है, तो समय आधी रात को चूक जाता है।
अपने कोड में, आप एक स्थानीय तारीख बनाते हैं और फिर इसे यूटीसी टाइमज़ोन में परिवर्तित करते हैं (वास्तव में, यह पल उदाहरण को यूटीसी मोड में बदल देता है ), इसलिए जब इसे प्रारूपित किया जाता है, तो इसे स्थानांतरित कर दिया जाता है (आपके स्थानीय समय के आधार पर) आगे या पीछे की ओर।
यदि स्थानीय समय क्षेत्र UTC + N (N एक धनात्मक संख्या है) है, और आप केवल दिनांक स्ट्रिंग करते हैं, तो आपको पिछली तारीख मिल जाएगी।
इसे उदाहरण देने के लिए कुछ उदाहरण हैं (DST के दौरान मेरा स्थानीय समय ऑफसेट UTC + 3 है):
>>> moment('07-18-2013', 'MM-DD-YYYY').utc().format("YYYY-MM-DD HH:mm")
"2013-07-17 21:00"
>>> moment('07-18-2013 12:00', 'MM-DD-YYYY HH:mm').utc().format("YYYY-MM-DD HH:mm")
"2013-07-18 09:00"
>>> Date()
"Thu Jul 25 2013 14:28:45 GMT+0300 (Jerusalem Daylight Time)"
यदि आप UTC के रूप में दिनांकित समय स्ट्रिंग की व्याख्या करना चाहते हैं, तो आपको इसके बारे में स्पष्ट होना चाहिए:
>>> moment(new Date('07-18-2013 UTC')).utc().format("YYYY-MM-DD HH:mm")
"2013-07-18 00:00"
या, जैसा कि मैट जॉनसन ने अपने उत्तर में उल्लेख किया है, आप ( और शायद चाहिए ) इसे यूटीसी की तारीख के रूप में उपयोग करके पहले स्थान पर पार्स कर सकते हैं औरmoment.utc()
अस्पष्टता को रोकने के लिए दूसरे तर्क के रूप में प्रारूप स्ट्रिंग शामिल करें।
>>> moment.utc('07-18-2013', 'MM-DD-YYYY').format("YYYY-MM-DD HH:mm")
"2013-07-18 00:00"
किसी अन्य तरीके से यूटीसी तिथि को स्थानीय तारीख में बदलने के लिए, आप इस local()
विधि का उपयोग कर सकते हैं :
>>> moment.utc('07-18-2013', 'MM-DD-YYYY').local().format("YYYY-MM-DD HH:mm")
"2013-07-18 03:00"
toString()
के बादformat()
(यह पहले से ही एक स्ट्रिंग रिटर्न)।