2017-04-26 4 views
4

Ich möchte meine Webseite Datum und Uhrzeit im Gebietsschema des Benutzers anzeigen.Javascript - aktuelle Locale mit Intl zum Anzeigen von Uhrzeit und Datum

Es scheint Intl von den meisten Browsern wird jetzt unterstützt (Can I Use Intl sehen). Ich kann Browser-Zeitzone gut erhalten, indem Sie Intl.DateTimeFormat().resolvedOptions().timeZone verwenden. Ich hoffte, dass ich in der Lage sein werde, eine Datum-Zeit mit meinem aktuellen Locale emittieren, indem Sie:

var date = new Date(2017, 11, 31, 23, 59, 59); 
 
var format = new Intl.DateTimeFormat(
 
    undefined, // locale 
 
    { 
 
    year: "numeric", 
 
    month: "numeric", 
 
    day: "numeric", 
 
    hour: "numeric", 
 
    minute: "numeric", 
 
    } 
 
) 
 

 
console.log(format.format(date))

ich Chrome unter Windows verwenden. Mein Windows OS-Gebietsschema ist auf "Tschechische Republik" eingestellt. Meine bevorzugte Website-Sprache ist in Chrome auf "Tschechisch" eingestellt, der Browser selbst ist jedoch auf US-Englisch eingestellt.

Mit diesen Einstellungen erfolgt die Ausgabe im 12 H-Format, als ob mein Gebietsschema en-us wäre. Sobald ich meinen Chrome-Browser auf Tschechisch als Präsentationssprache umstelle, wird die Zeit auf 24 umgestellt.

Ich denke, ich muss etwas offensichtlich fehlen - ist Webseite wirklich nicht in der Lage, das Gebietsschema Benutzer verwenden zu verwenden, oder ist das ein Bug oder Unvollständigkeit in Chrome Intl Implementierung?

Antwort

0

Ich fand folgenden ist zuverlässiger auf Chrome: man kann navigator.languages[0] verwenden, um das Gebietsschema zu erhalten, das durch die Sprache definiert wird, die der Benutzer für den Inhalt vorzieht. Siehe auch Best way to determine user's locale within browser für eine Diskussion über die Browserkompatibilität.

function getLocale() { 
 
    return (navigator.languages && navigator.languages.length) ? navigator.languages[0] : navigator.language; 
 
} 
 

 

 
var locale = getLocale(); 
 
var date = new Date(2017, 11, 31, 23, 59, 59); 
 
var format = new Intl.DateTimeFormat(
 
    locale, 
 
    { 
 
    year: "numeric", 
 
    month: "numeric", 
 
    day: "numeric", 
 
    hour: "numeric", 
 
    minute: "numeric", 
 
    } 
 
) 
 

 
console.log(format.format(date))

Dennoch scheint es eine Schande, man nicht das System große Auswahl an locale hat der Benutzer gemacht zugreifen können.

Verwandte Themen