Benötigen Sie Hilfe / Tipps zum Konvertieren eines ISO 8601-Datums mit der folgenden Struktur in Javascript?
CCYY-MM-DDThh:mm:ssTZD
Ich möchte das Datum so formatieren:
January 28, 2011 - 7:30PM EST
Ich möchte diese Lösung so sauber und minimal wie möglich halten.
javascript
datetime
formatting
iso8601
Slythic
quelle
quelle
Antworten:
datejs könnte folgendes analysieren, vielleicht möchten Sie es ausprobieren.
Date.parse('1997-07-16T19:20:15') // ISO 8601 Formats Date.parse('1997-07-16T19:20:30+01:00') // ISO 8601 with Timezone offset
Bearbeiten: Regex-Version
x = "2011-01-28T19:30:00EST" MM = ["January", "February","March","April","May","June","July","August","September","October","November", "December"] xx = x.replace( /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):\d{2}(\w{3})/, function($0,$1,$2,$3,$4,$5,$6){ return MM[$2-1]+" "+$3+", "+$1+" - "+$4%12+":"+$5+(+$4>12?"PM":"AM")+" "+$6 } )
Ergebnis
January 28, 2011 - 7:30PM EST
Edit2: Ich habe meine Zeitzone auf EST geändert und jetzt folge ich
x = "2011-01-28T19:30:00-05:00" MM = {Jan:"January", Feb:"February", Mar:"March", Apr:"April", May:"May", Jun:"June", Jul:"July", Aug:"August", Sep:"September", Oct:"October", Nov:"November", Dec:"December"} xx = String(new Date(x)).replace( /\w{3} (\w{3}) (\d{2}) (\d{4}) (\d{2}):(\d{2}):[^(]+\(([A-Z]{3})\)/, function($0,$1,$2,$3,$4,$5,$6){ return MM[$1]+" "+$2+", "+$3+" - "+$4%12+":"+$5+(+$4>12?"PM":"AM")+" "+$6 } )
Rückkehr
January 28, 2011 - 7:30PM EST
Grundsätzlich
String(new Date(x))
Rückkehr
Fri Jan 28 2011 19:30:00 GMT-0500 (EST)
Regex-Teile konvertieren nur die obige Zeichenfolge in das gewünschte Format.
January 28, 2011 - 7:30PM EST
quelle
Das Date-Objekt behandelt 8601 als ersten Parameter:
var d = new Date("2014-04-07T13:58:10.104Z"); console.log(d.toString());
quelle
Wenn Sie es einfach halten möchten, sollte dies ausreichen:
function parseIsoDatetime(dtstr) { var dt = dtstr.split(/[: T-]/).map(parseFloat); return new Date(dt[0], dt[1] - 1, dt[2], dt[3] || 0, dt[4] || 0, dt[5] || 0, 0); }
Beachten Sie, dass parseFloat ein Muss ist, parseInt funktioniert nicht immer. Für die Karte ist IE9 oder höher erforderlich.
Funktioniert für Formate:
Nicht gültig für Zeitzonen, siehe andere Antworten zu diesen.
quelle
return new Date(Date.UTC(dt[0], dt[1] - 1, dt[2], dt[3] || 0, dt[4] || 0, dt[5] || 0, 0));
Vielleicht können Sie moment.js verwenden, das meiner Meinung nach die beste JavaScript-Bibliothek zum Parsen, Formatieren und Arbeiten auf der Clientseite ist. Sie könnten etwas verwenden wie:
var momentDate = moment('1890-09-30T23:59:59+01:16:20', 'YYYY-MM-DDTHH:mm:ss+-HH:mm:ss'); var jsDate = momentDate.toDate(); // Now, you can run any JavaScript Date method jsDate.toLocaleString();
Der Vorteil der Verwendung einer Bibliothek wie moment.js besteht darin, dass Ihr Code auch in älteren Browsern wie IE 8+ einwandfrei funktioniert.
Hier ist die Dokumentation zu Parsing-Methoden: https://momentjs.com/docs/#/parsing/
quelle
Sieht aus wie moment.js ist das beliebteste und mit aktiver Entwicklung:
moment("2010-01-01T05:06:07", moment.ISO_8601);
quelle
Laut MSDN bietet das JavaScript-Datumsobjekt keine spezifischen Datumsformatierungsmethoden (wie Sie möglicherweise bei anderen Programmiersprachen sehen). Sie können jedoch einige der
Date
Methoden und Formatierungen verwenden, um Ihr Ziel zu erreichen:function dateToString (date) { // Use an array to format the month numbers var months = [ "January", "February", "March", ... ]; // Use an object to format the timezone identifiers var timeZones = { "360": "EST", ... }; var month = months[date.getMonth()]; var day = date.getDate(); var year = date.getFullYear(); var hours = date.getHours(); var minutes = date.getMinutes(); var time = (hours > 11 ? (hours - 11) : (hours + 1)) + ":" + minutes + (hours > 11 ? "PM" : "AM"); var timezone = timeZones[date.getTimezoneOffset()]; // Returns formatted date as string (e.g. January 28, 2011 - 7:30PM EST) return month + " " + day + ", " + year + " - " + time + " " + timezone; } var date = new Date("2011-01-28T19:30:00-05:00"); alert(dateToString(date));
Sie können sogar noch einen Schritt weiter gehen und die
Date.toString()
Methode überschreiben :function dateToString () { // No date argument this time // Use an array to format the month numbers var months = [ "January", "February", "March", ... ]; // Use an object to format the timezone identifiers var timeZones = { "360": "EST", ... }; var month = months[*this*.getMonth()]; var day = *this*.getDate(); var year = *this*.getFullYear(); var hours = *this*.getHours(); var minutes = *this*.getMinutes(); var time = (hours > 11 ? (hours - 11) : (hours + 1)) + ":" + minutes + (hours > 11 ? "PM" : "AM"); var timezone = timeZones[*this*.getTimezoneOffset()]; // Returns formatted date as string (e.g. January 28, 2011 - 7:30PM EST) return month + " " + day + ", " + year + " - " + time + " " + timezone; } var date = new Date("2011-01-28T19:30:00-05:00"); Date.prototype.toString = dateToString; alert(date.toString());
quelle