2013-01-09 50 views
9

मैं एक वेब सेवा से एक स्ट्रिंग इस प्रारूप में एक तारीख के साथ प्राप्त करते हैं:Convert yyyy-MM-DDThh: mm: जावास्क्रिप्ट में datetime को ss.fffZ मैन्युअल

yyyy-MM-ddTHH:mm:ss.fffZ 

मैं जावास्क्रिप्ट के साथ करने के लिए कि स्ट्रिंग बदलने की आवश्यकता एक सामान्य दिनांक समय लेकिन नए Date('yyyy-MM-ddTHH:mm:ss.fffZ') का उपयोग कर, क्योंकि मुझे लगता है कि है कि रूपांतरण का समर्थन नहीं जावास्क्रिप्ट के एक पुराने संस्करण का उपयोग कर रहा बिना। मुझे लगता है कि स्ट्रिंग विभाजित है और प्राप्त कर सकते हैं:

  • वर्ष
  • महीना
  • दिन
  • समय

लेकिन कैसे समय क्षेत्र "fffZ" कोई सुझाव हेरफेर करने के लिए?

+1

अपने जावास्क्रिप्ट पर्यावरण क्या है? –

+3

'fffZ' एक समय क्षेत्र नहीं है - समय क्षेत्र' है Z' ([ज़ुलु समय] (http://en.wikipedia.org/wiki/Zulu_time) है, जो यूटीसी का मतलब है), और 'fff' तीन दशमलव के हैं जो सेकेंड भाग ('ss.fff') से संबंधित है - यदि आप सभी तीनों को एक साथ लेते हैं, तो वे मिलीसेकंड भाग बनाते हैं। – MvanGeest

+0

एंड्रॉइड 2.3 (फोनगैप और चाइल्ड ब्राउजर का उपयोग करना) –

उत्तर

5

मैं समाधान की स्थापना की है। कृपया जांच करें http://webcloud.se/log/JavaScript-and-ISO-8601/

Date.prototype.setISO8601 = function (string) { 
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" + 
     "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" + 
     "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"; 
    var d = string.match(new RegExp(regexp)); 

    var offset = 0; 
    var date = new Date(d[1], 0, 1); 

    if (d[3]) { date.setMonth(d[3] - 1); } 
    if (d[5]) { date.setDate(d[5]); } 
    if (d[7]) { date.setHours(d[7]); } 
    if (d[8]) { date.setMinutes(d[8]); } 
    if (d[10]) { date.setSeconds(d[10]); } 
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); } 
    if (d[14]) { 
     offset = (Number(d[16]) * 60) + Number(d[17]); 
     offset *= ((d[15] == '-') ? 1 : -1); 
    } 

    offset -= date.getTimezoneOffset(); 
    time = (Number(date) + (offset * 60 * 1000)); 
    this.setTime(Number(time)); 
} 
+0

और आप इसका उपयोग कैसे करते हैं? 'Date.setISO8601 ('2010-01-02T00: 00: 01') 'इस तरह? – Bellash

0

आप जानते हैं कि यह इस प्रपत्र (ISO 8601, wiki) का हो जाएगा, तो आप रेगुलर एक्सप्रेशन या स्ट्रिंग तरीकों के साथ पार्स कर सकते हैं। यहाँ एक रेगुलर एक्सप्रेशन उदाहरण आप समय क्षेत्र Z, +hh या +hh:mm का उपयोग करने देता है।

var dateString = '2013-01-08T17:16:36.000Z'; 

var ISO_8601_re = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{3}))?(Z|[\+-]\d{2}(?::\d{2})?)$/, 
    m = dateString .match(ISO_8601_re); 

var year = +m[1], 
    month = +m[2], 
    dayOfMonth = +m[3], 
    hour = +m[4], 
    minute = +m[5], 
    second = +m[6], 
    ms = +m[7], // +'' === 0 
    timezone = m[8]; 

if (timezone === 'Z') timezone = 0; 
else timezone = timezone.split(':'), timezone = +(timezone[0][0]+'1') * (60*(+timezone[0].slice(1)) + (+timezone[1] || 0)); 
// timezone is now minutes 

// your prefered way to construct 
var myDate = new Date(); 
myDate.setUTCFullYear(year); 
myDate.setUTCMonth(month - 1); 
myDate.setUTCDate(dayOfMonth); 
myDate.setUTCHours(hour); 
myDate.setUTCMinutes(minute + timezone); // timezone offset set here, after hours 
myDate.setUTCSeconds(second); 
myDate.setUTCMilliseconds(ms); 

console.log(myDate); // Tue Jan 08 2013 17:16:36 GMT+0000 (GMT Standard Time) 
+0

आपने 28 दिनों तक इसे याद किया ... – kennebec

+1

@kennebec मुझे यह याद नहीं आया, मैं बस कॉपी करने में असफल रहा सही बात –

10

यहाँ John Resig से एक एक लाइनर है:

var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")), 
+0

'नई तिथि (" 1987/02/28 23: 11: 81.333 ")' मुझे देता है 'अमान्य Date' –

+3

मैं इस सवाल का जवाब समझाया जा करने की जरूरत है यह एक उदाहरण के रूप में की जरूरत है लगता है और यह एक अल्पविराम में समाप्त होता है –

-2

momentjs यह और कई अन्य तारीख समस्याओं को आप हो सकता है का जवाब है। हालांकि यह स्पष्ट आप कहाँ और कैसे उपयोगकर्ता आवश्यकतानुसार समय, न तो वांछित प्रारूप, मुझे लगता है कि होगा momentjs आप की जरूरत कार्यों में से कुछ दे सकते हैं मैं अपने समाधान के लिए मॉड्यूल जोड़ सकते हैं और के रूप में प्रयोग करेंगे नहीं है (नीचे पार्स है। कॉम बादल कोड):

Parse.Cloud.define("momentFormat", function(request, response){ 
    var message; 

    var date = momento('2013-01-08T17:16:36.000Z'); 
    response.success("original format date: " + date.format("YYYY-MM-DDTHH:mm:ss.SSSZ") + " new format date: " + date.format("dddd, MMMM Do YYYY, h:mm:ss a")); 
}); 

आउटपुट:

{"result":"original format date: 2013-01-08T17:16:36.000+00:00 new format date: Tuesday, January 8th 2013, 5:16:36 pm"} 
+0

सही .... मैं इसका जवाब देने में बहुत जल्दी था। निश्चित क्षणों के लिए आपको बहुत मदद मिल सकती है .. लेकिन yyyy-MM-ddTHH: mm: ss.fffZ को पूरी तरह से पुनर्निर्मित नहीं किया गया है। एफएफ भाग के साथ कुछ करने के लिए .... लेकिन मेरा मुख्य बिंदु यह है कि पलज का उपयोग करके आप कई मुद्दों पर काबू पा सकते हैं। – Chasky