मैं क्षण में आईएसओ 8601 के रूप में एक तारीख कैसे प्रारूपित करता हूं।


201

यह डॉक्स moment.ISO_8601एक प्रारूपण विकल्प के रूप में उल्लिखित है (2.7.0 से - http://momentjs.com/docs/#/parsing/special-formats/ ), लेकिन इनमें से कोई भी काम नहीं (यहां तक ​​कि 2.7.0):

var date = moment();
date.format(moment.ISO_8601); // error
moment.format(date, moment.ISO_8601); // error

( http://jsfiddle.net/b3d6uy05/1/ )

मैं क्षण भर से आईएसओ 8601 कैसे प्राप्त कर सकता हूं।


आप किस क्षण का उपयोग कर रहे हैं? डॉक्स कहते हैं कि 2.7.0 में निरंतर जोड़ा गया था।
जॉ सिप

@joews 2.7.0 प्रश्न में स्पष्ट। मेरा जवाब देखिए मुझे लगा। डॉक्स हालांकि बेहद स्पष्ट नहीं हैं।
sennett

हाँ, वे केवल पार्सिंग के संदर्भ में विशेष स्वरूपों का उल्लेख करते हैं। अजीब।
जॉफ

2
u कोशिश कर सकते हैंmoment().toISOString()
Saahithyan Vigneswaran

जवाबों:


339
moment().toISOString(); // or format() - see below

http://momentjs.com/docs/#/displaying/as-iso-string/

अपडेट उत्तर के आधार पर: @sennet द्वारा और @dvlsg ( Fiddle देखें ) की टिप्पणी से यह ध्यान दिया जाना चाहिए कि formatऔर दोनों के बीच अंतर है toISOString। दोनों सही हैं लेकिन अंतर्निहित प्रक्रिया अलग है। toISOStringएक दिनांक ऑब्जेक्ट में कनवर्ट करता है, UTC के लिए सेट होता है, फिर मिलिसेकंड ( YYYY-MM-DD[T]HH:mm:ss.SSS[Z]) के साथ UTC में ISO8601 आउटपुट के लिए मूल दिनांक प्रोटोटाइप फ़ंक्शन का उपयोग करता है । दूसरी ओर, मिलीसेकंड के बिना formatडिफ़ॉल्ट प्रारूप ( YYYY-MM-DDTHH:mm:ssZ) का उपयोग करता है और टाइमज़ोन ऑफसेट को बनाए रखता है।

मैंने एक मुद्दा खोला है क्योंकि मुझे लगता है कि यह अप्रत्याशित परिणाम ला सकता है।


1
मैं आपसे सहमत हूँ @ यशुआ। मुझे लगता है कि "प्रारूप ()" के उपयोग से बचा जाना चाहिए क्योंकि यह सहज नहीं है। इसके अलावा, मुझे लगता है कि सिर्फ "toISOString ()" मूल लपेटता है कि एक समारोह में मौजूद नहीं होना चाहिए। यह कहा जा रहा है, शायद एक नया कार्य दे रहा है जैसे: "toISO8601 ()" समय-सारणी रखने के विकल्प के साथ और एक उचित प्रलेखन बेहतर होगा।
ग्रिविन लोपेज़

4
यदि आप utc समय चाहते हैं, लेकिन ISO8601 के बजाय अपने तरीके से फॉर्मेट किया है, तो आप निम्न कार्य कर सकते हैं:moment().utc().format("OUTPUT_FORMAT")
StinkyCat

उपयोगी क्रिया kibana में एक तारीख बनाने पर आपके पास JS तक पहुँच नहीं है।
ब्राइस

1
यदि आप स्थानीय समय क्षेत्र को बनाए रखना चाहते हैं, तो उपयोग करें moment().toISOString(true);
बेनी न्युगबॉएर

83

formatबिना किसी पैरामीटर के उपयोग करें :

var date = moment();
date.format(); // "2014-09-08T08:02:17-05:00"

( http://jsfiddle.net/8gvhL1dz/ )


31
साइड नोट के रूप में, ये दो उत्तर समान नहीं हैं, भले ही वे दोनों आईएसओ प्रारूप आवश्यकताओं को पूरा करते हैं। date.toISOString()मिलीसेकंड रखेंगे और utc का उपयोग करेंगे, date.format()मिलीसेकेंड को छोड़ देंगे और अपने स्थानीय समयक्षेत्र का उपयोग करेंगे (या कम से कम, जो व्यवहार मैं वर्तमान में क्रोम में कर रहा हूं - jsfiddle.net/8gvhL1dz/22/22 )
Dvlsg

एक अरबी स्थान के साथ .format () का उपयोग करना अंग्रेजी के बजाय अरबी प्रतीकों की ओर जाता है, जो संभवतः अवांछनीय है।
user393274

अपने स्थानीय समय-क्षेत्र में टिस्सट्रिंग आउटपुट नहीं करता है - यह हमेशा (शून्य ऑफसेट) यूटीसी में होता है।
जोएटाइड

11

वेनिला जेएस के साथ भी संभव है

new Date().toISOString() // "2017-08-26T16:31:02.349Z"

3
केवल तभी यदि आप इसे यूटीसी में चाहते हैं, बिना समयक्षेत्र बनाए रखे।
जोएटाइड

8

जब आप Mongoose का उपयोग MongoDB में तिथियों को संग्रहीत करने के लिए करते हैं, तो आपको toISOString () का उपयोग करने की आवश्यकता होती है क्योंकि सभी तिथियां आईएसओ के रूप में संग्रहीत की जाती हैं।

moment.format() 

2018-04-17T20:00:00Z

moment.toISOString() -> USE THIS TO STORE IN MONGOOSE

2018-04-17T20:00:00.000Z

3

यदि आप केवल दिनांक भाग (जैसे 2017-06-27) चाहते हैं, और आप इसे समय क्षेत्र की परवाह किए बिना और अरबी में भी काम करना चाहते हैं, तो यहां कोड है जो मैंने लिखा है:

function isoDate(date) {
    if (!date) {
        return null
    }
    date = moment(date).toDate()

    // don't call toISOString because it takes the time zone into
    // account which we don't want.  Also don't call .format() because it
    // returns Arabic instead of English

    var month = 1 + date.getMonth()
    if (month < 10) {
        month = '0' + month
    }
    var day = date.getDate()
    if (day < 10) {
        day = '0' + day
    }
    return date.getFullYear() + '-' + month + '-' + day
}

0
var x = moment();

//date.format(moment.ISO_8601); // error

moment("2010-01-01T05:06:07", ["YYYY", moment.ISO_8601]);; // error
document.write(x);

2
हालांकि यह कोड प्रश्न का हल प्रदान कर सकता है, इसलिए संदर्भ जोड़ना बेहतर है कि यह क्यों / कैसे काम करता है। यह भविष्य के उपयोगकर्ताओं को सीखने में मदद कर सकता है, और उस ज्ञान को अपने कोड में लागू कर सकता है। जब कोड समझाया जाता है, तो आपको उपयोगकर्ताओं से upvotes के रूप में सकारात्मक प्रतिक्रिया मिलने की संभावना होती है।
बोरवम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.