2016-09-30 2 views
1

Hier ist, was ich tun muss:Andere Optionen als mit Date.parse()

ich ein ISO 8601-Format haben datestring dateString = "2016-09-30T04:00:00.000+0000" , die ich brauche, um zu analysieren und ein lesbares Datum „September 30, 2016

zu produzieren Hier ist mein Formatierer sap.ui.core.format.DateFormat, der das für mich tut.

return dateFormatter.format(new Date(dateString)); 

Das Problem ist, nach MDN,

Es wird empfohlen, nicht Date.parse als bis ES5 zu verwenden, das Parsen von Strings war völlig abhängig von der Implementierung. Es gibt immer noch viele Unterschiede in der Art und Weise, wie verschiedene Hosts Datumstrings analysieren, daher sollte das Datum Strings manuell geparst werden (eine Bibliothek kann helfen, wenn viele verschiedene Formate berücksichtigt werden sollen).

  • Direktanruf: Date.parse(dateString)
  • impliziter Aufruf: new Date(dateString)

So Date.parse() heißt sowieso mit meinem Formatierer.

Gibt es bessere Verfahren zum manuellen Parsen wie von MDN empfohlen? Gibt es einen SAPUI5-Weg, um dies zu erreichen?

+1

ES5, ich denke, es gibt sehr wenige Leute auf ES3, und wenn es auf ES3 gäbe, dann würde ich bezweifeln, dass SAPUI5 funktionieren würde :), also würde ich sagen, dass es gut ist, Parse zu verwenden. Wenn nicht, gibt es auch moment.js, die Sie verwenden könnten. – Keith

+1

"Date.parse" wird * von ES5 * unterstützt, aber die Art und Weise, wie es in Engines implementiert wird, ist immer noch nicht konsistent, weshalb Sie die Datumsanalyse selbst durchführen sollten. – adeneo

+0

@adeneo, dieses Datum sieht wie ein perfekt geformtes ISO-Datum aus, wenn Sie irgendwelche Browser kennen, die das nicht decodieren können, würde mich interessieren. – Keith

Antwort

0

Parsing ISO Daten sollten in den meisten Motoren konsistent sein, aber es gibt keine Garantie, die richtige Art und Weise ein Date-Objekt zu definieren, würde immer die Integer-Argumente übergeben werden als

new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]); 

folgt aber da Sie wollen Zeichenfolge enthält Monate usw. zurück, und kein Gegenstand, der konsequenteste Weg, dies zu tun wäre, um die Daten zu analysieren, einfach selbst

var dateString = "2016-09-30T04:00:00.000+0000"; 
 

 
var months = [ 
 
    '', 'January', 'February', 'March', 'April', 
 
    'May', 'June', 'July', 'August', 'September', 
 
    'October', 'November', 'December' 
 
]; 
 

 
var parts = dateString.split(/[-T:.]/); 
 
var parsed = months[+parts[1]] + ' ' + parts[2] + ', ' + parts[0]; 
 

 
document.body.innerHTML = parsed; // September 30, 2016

+0

Nach viel Diskussion, Versuch und Irrtum - der SAPUI5 Weg, dies zu lösen, wäre [sap.ui.model.type.DateTime] (https://openui5.hana.ondemand.com/docs/api/symbols/sap .ui.model.type.DateTime.html) oder [sap.ui.model.type.Date] (https://openui5.hana.ondemand.com/docs/api/symbols/sap.ui.model.type. Date.html), wenn Sie nicht zu viel Anpassung an die Anzeige von Daten haben. Dies würde jedoch das Styling der Datumsangaben basierend auf den Gebietsschema-Informationen oder dem Datum des lokalen Rechners basieren. – daredadevil

Verwandte Themen