2017-07-07 3 views
2

In aktuellen Chrome, Firefox und Safari Intl.DateTimeFormat für den Lokalisierungs it-CH (italienische Schweiz) ist falsch:Intl.DateTimeFormat produziert falsches Format

new window.Intl.DateTimeFormat('it-CH').format(new Date()) // -> "6/7/2017" 
new window.Intl.DateTimeFormat('fr-CH').format(new Date()) // -> "06.07.2017" 
new window.Intl.DateTimeFormat('de-CH').format(new Date()) // -> "06.07.2017" 

Der Ausgang der ersten Zeile falsch ist. In allen Teilen der Schweiz sollte das Format "dd.mm.yyyy"

Interessanterweise IE11 & Edge den richtigen Ausgang für das obige Snippet produzieren.

Was ist der beste Weg, um die fehlerhafte Implementierung von window.Intl in bestimmten Browsern zu reparieren/zu korrigieren?

Antwort

1

Nicht sicher am besten, aber die einfachste sollte wie folgt sein:

var nativeDateTimeFormat = window.Intl.DateTimeFormat; 
window.Intl.DateTimeFormat = function(locale) { 
    var native = nativeDateTimeFormat(locale); 
    if (locale === 'it-CH') { 
    native.format = function() { 
     return nativeDateTimeFormat('fr-CH').format(); 
    } 
    } 
    return native; 
} 

Diese Lösung nutzt die Tatsache, dass fr-CH das richtige Format hat, dass it-CH haben sollte.

+0

Leider scheint dies in Chrome nicht zu funktionieren. Das Festlegen der 'Format'-Funktion für das systemeigene' DateTimeFormat' scheint nicht möglich zu sein. Einstellen hat es einfach keine Wirkung ... – jbandi

+0

Ich habe eine Follow-up-Frage hier: https://StackOverflow.com/Questions/45077313/understanding-intl-datetimeformat-as-a-javascript-object – jbandi

+0

@jbandi Ah, Aha. Hoffentlich könntest du den Code aus meinem Vorschlag in einer Utility-Funktion verwenden und das verwenden, aber wenn du auf eine 3rd-Party-Bibliothek verlassst, die 'Intl.DateTimeFormat' intern benutzt, ist das leider keine Option. –

Verwandte Themen