0

Ein Service, den ich mir in einem json Antwort anzurufenden stellt Daten als Microsoft-Format wie folgt aus:Formatieren eines JSON Datum auf eine formatierte Datum basierend auf locale

"\/Date(1458845940000)\/" 

ich für die beste herum haben suchen Art und Weise, es zu behandeln und es in Javascript in die lokale Datumszeit korrekt zu konvertieren.
Ich wünschte, es zum Beispiel formatiert werden, wenn es das ist

en-US locale "MM/DD/yyyy HH:mm:ss a" -> 3/24/2016 3:59:00 PM 
en-GB locale "DD/MM/yyyy HH:mm:ss" -> 24/03/2016 15:59:00 

Die erste Ausgabe versucht, das angegebenen String-Format zu einem Datum zu konvertieren über über. Ich habe mich damit abgefunden und es scheint zu funktionieren, aber ich bin mir nicht sicher, ob es der beste Weg ist, es zu tun.

Es gibt ein Datumsobjekt aus, das ich jetzt verwenden kann, um die Formatierung mithilfe der Internationalisierungs-API durchzuführen. Ich kann dann das Gebietsschema verwenden, die manchmal richtig (dazu später mehr) ist ein Datum zu produzieren:

var jsDate = new Date(parseInt(jsonDate.substr(6))); 
var locale = window.navigator.userLanguage || window.navigator.language; 
jsDate.toLocaleString(locale); //3/24/2016 3:59:00 PM or 24/03/2016, 15:59:00 

Das Format fast da in der Ausgabe ist, aber mit dem zusätzlichen Komma, aber dann, wenn ich das Kommas Streifen aus, die ist ein bisschen hokey zu tun oder eine Neuformatierung, die basierend auf Lokalisierung nicht funktionieren würde.

Meine zweite Frage, gibt es einen sicheren Weg, um das Gebietsschema zu erhalten? Ich habe versucht, es durch userLanguage oder Sprache zu erkennen, aber ich erkannte, dass es auch BrowserLanguage gibt, die von IE verwendet wird.

var locale = window.navigator.userLanguage || window.navigator.language; 

Die oben ist inkonsistent und nicht die volle Beweis, weil beispielsweise in Chrom scheint, wenn Sie in Ihrer Sprache und Eingabeeinstellungen mehr Sprachen eingestellt haben sie die letzten in der Liste ziehen, wenn Chrom standardmäßig den ersten in die Liste und nicht sicher, wie andere Browser damit umgehen würden.

Ich habe andere Orte gelesen, um momentjs zu verwenden, die ich versuchte, einschließlich moment.min.js und moment-with-locales.min.js. Aber es hat auch nicht funktioniert:

Ich habe ein Problem in momentjs darüber geschrieben, aber es war älter. https://github.com/moment/moment/issues/1044

Ich bin unsicher, ob mir etwas Dummes fehlt oder ob es einen besseren Weg gibt, dies zu tun? Danke

Antwort

0

Mit Moment können Sie Ihre Eingabe mit moment(String) analysieren.

Dann können Sie das Moment-Gebietsschema mit der Funktion locale() einstellen und so können Sie lokalisierte Datums- und Uhrzeitangaben mit format("L LTS") anzeigen.

Beachten Sie, dass Sie zuerst das Gebietsschema ändern müssen und dann ein Momentobjekt erstellen müssen.

Hier ist ein Beispielcode für en-gb und en-us locales:

var input = "\/Date(1458845940000)\/"; 
 

 
function changeLang(value){ 
 
    moment.locale(value); 
 
    var res = moment(input).format("L LTS"); 
 
    $("#result").html(res); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script> 
 

 
<select onchange="changeLang(value)"> 
 
    <option value="en">en</option> 
 
    <option value="en-gb">en-gb</option> 
 
    <option value="en-us">en-us</option> 
 
</select> 
 

 
<div id="result"></div>

+0

Ich habe fast genau die gleiche Code-Implementierung oben, aber das Teil ich bin trübe war, wie das Gebietsschema zu erkennen zu geben, Um den Moment zu setzen? Das ist meine zweite Ausgabe. – Lumpy

+0

@Lumpy versuchen zu vermeiden, mehrere unterschiedliche Fragen auf einmal zu stellen. Wenn Sie wissen müssen, wie Sie das Local von browers bekommen, gibt es bereits viele ähnliche Fragen zu SO (zB [hier] (http://stackoverflow.com/q/1043339/4131048). In Ihrem Codebeispiel haben Sie angegeben: _gibt es nicht ändere die Basis für das Gebietsschema, so bleibt es MM/DD/YYYY_ deshalb habe ich diese Antwort mit einem funktionierenden Beispiel mit momentjs gegeben. – VincenzoC

Verwandte Themen