2014-09-08 5 views
89

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

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

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

मैं एक कैसे प्राप्त कर सकते हैं Moment.js से आईएसओ 8601? कोई पैरामीटर के साथ

+0

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

+0

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

+0

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

उत्तर

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

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

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

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

+0

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

+1

यदि आप utc time चाहते हैं, लेकिन ISO8601 के बजाय अपना स्वयं का स्वरूप स्वरूपित करते हैं, तो आप निम्न कार्य कर सकते हैं: 'moment()। Utc()। प्रारूप ("OUTPUT_FORMAT") ' – StinkyCat

+0

किबाना में एक तिथि बनाने के लिए उपयोगी whn लेकिन आप जेएस तक पहुंच नहीं है। – Brice

48

उपयोग format:

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

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

+20

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

+0

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

2

तुम सिर्फ तारीख भाग (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 
} 
4

भी संभव वेनिला जेएस

new Date().toISOString() // "2017-08-26T16:31:02.349Z" 
संबंधित मुद्दे