Holen Sie sich das Short Date Format für das Gebietsschema mit Javascript


86

Gibt es überhaupt eine Möglichkeit, mithilfe von JavaScript das in der Systemsteuerung verwendete kurze Datumsformat -> Regional- und Spracheinstellungen zu kennen?

Ich weiß, dass wir durch die Kombination der folgenden Optionen das Gebietsschema für lange Namen erhalten können

toString()
toLocaleString()
toLocaleDateString()
toLocaleTimeString()

Aber es gibt keine direkte Funktion in JavaScript wie toLocaleShortDateString().

Gibt es Skripte, um herauszufinden, wie die Benutzereinstellung lautet?

Vielen Dank.


Nur um sicherzugehen, dass ich verstehe: Du meinst heiß, das Format selbst zu bekommen? Weil der Name der "fehlenden Funktion", den Sie angeben, irreführend ist (toLocaleShortDateString), vielleicht so etwas wie "getLocaleShortDateFormat"?
Amitay Dobo

Ich fand die Antworten auf diese verwandte Frage für meine Zwecke hilfreicher, da ich nur einen halbwegs anständigen Standard bereitstellen möchte, für den die dort vorgestellten Nur-Client-Lösungen nützlich sind.
Kirk Woll

Antworten:


170
function getLocaleDateString(){

var formats = {
   "ar-SA" : "dd/MM/yy",
   "bg-BG" : "dd.M.yyyy",
   "ca-ES" : "dd/MM/yyyy",
   "zh-TW" : "yyyy/M/d",
   "cs-CZ" : "d.M.yyyy",
   "da-DK" : "dd-MM-yyyy",
   "de-DE" : "dd.MM.yyyy",
   "el-GR" : "d/M/yyyy",
   "en-US" : "M/d/yyyy",
   "fi-FI" : "d.M.yyyy",
   "fr-FR" : "dd/MM/yyyy",
   "he-IL" : "dd/MM/yyyy",
   "hu-HU" : "yyyy. MM. dd.",
   "is-IS" : "d.M.yyyy",
   "it-IT" : "dd/MM/yyyy",
   "ja-JP" : "yyyy/MM/dd",
   "ko-KR" : "yyyy-MM-dd",
   "nl-NL" : "d-M-yyyy",
   "nb-NO" : "dd.MM.yyyy",
   "pl-PL" : "yyyy-MM-dd",
   "pt-BR" : "d/M/yyyy",
   "ro-RO" : "dd.MM.yyyy",
   "ru-RU" : "dd.MM.yyyy",
   "hr-HR" : "d.M.yyyy",
   "sk-SK" : "d. M. yyyy",
   "sq-AL" : "yyyy-MM-dd",
   "sv-SE" : "yyyy-MM-dd",
   "th-TH" : "d/M/yyyy",
   "tr-TR" : "dd.MM.yyyy",
   "ur-PK" : "dd/MM/yyyy",
   "id-ID" : "dd/MM/yyyy",
   "uk-UA" : "dd.MM.yyyy",
   "be-BY" : "dd.MM.yyyy",
   "sl-SI" : "d.M.yyyy",
   "et-EE" : "d.MM.yyyy",
   "lv-LV" : "yyyy.MM.dd.",
   "lt-LT" : "yyyy.MM.dd",
   "fa-IR" : "MM/dd/yyyy",
   "vi-VN" : "dd/MM/yyyy",
   "hy-AM" : "dd.MM.yyyy",
   "az-Latn-AZ" : "dd.MM.yyyy",
   "eu-ES" : "yyyy/MM/dd",
   "mk-MK" : "dd.MM.yyyy",
   "af-ZA" : "yyyy/MM/dd",
   "ka-GE" : "dd.MM.yyyy",
   "fo-FO" : "dd-MM-yyyy",
   "hi-IN" : "dd-MM-yyyy",
   "ms-MY" : "dd/MM/yyyy",
   "kk-KZ" : "dd.MM.yyyy",
   "ky-KG" : "dd.MM.yy",
   "sw-KE" : "M/d/yyyy",
   "uz-Latn-UZ" : "dd/MM yyyy",
   "tt-RU" : "dd.MM.yyyy",
   "pa-IN" : "dd-MM-yy",
   "gu-IN" : "dd-MM-yy",
   "ta-IN" : "dd-MM-yyyy",
   "te-IN" : "dd-MM-yy",
   "kn-IN" : "dd-MM-yy",
   "mr-IN" : "dd-MM-yyyy",
   "sa-IN" : "dd-MM-yyyy",
   "mn-MN" : "yy.MM.dd",
   "gl-ES" : "dd/MM/yy",
   "kok-IN" : "dd-MM-yyyy",
   "syr-SY" : "dd/MM/yyyy",
   "dv-MV" : "dd/MM/yy",
   "ar-IQ" : "dd/MM/yyyy",
   "zh-CN" : "yyyy/M/d",
   "de-CH" : "dd.MM.yyyy",
   "en-GB" : "dd/MM/yyyy",
   "es-MX" : "dd/MM/yyyy",
   "fr-BE" : "d/MM/yyyy",
   "it-CH" : "dd.MM.yyyy",
   "nl-BE" : "d/MM/yyyy",
   "nn-NO" : "dd.MM.yyyy",
   "pt-PT" : "dd-MM-yyyy",
   "sr-Latn-CS" : "d.M.yyyy",
   "sv-FI" : "d.M.yyyy",
   "az-Cyrl-AZ" : "dd.MM.yyyy",
   "ms-BN" : "dd/MM/yyyy",
   "uz-Cyrl-UZ" : "dd.MM.yyyy",
   "ar-EG" : "dd/MM/yyyy",
   "zh-HK" : "d/M/yyyy",
   "de-AT" : "dd.MM.yyyy",
   "en-AU" : "d/MM/yyyy",
   "es-ES" : "dd/MM/yyyy",
   "fr-CA" : "yyyy-MM-dd",
   "sr-Cyrl-CS" : "d.M.yyyy",
   "ar-LY" : "dd/MM/yyyy",
   "zh-SG" : "d/M/yyyy",
   "de-LU" : "dd.MM.yyyy",
   "en-CA" : "dd/MM/yyyy",
   "es-GT" : "dd/MM/yyyy",
   "fr-CH" : "dd.MM.yyyy",
   "ar-DZ" : "dd-MM-yyyy",
   "zh-MO" : "d/M/yyyy",
   "de-LI" : "dd.MM.yyyy",
   "en-NZ" : "d/MM/yyyy",
   "es-CR" : "dd/MM/yyyy",
   "fr-LU" : "dd/MM/yyyy",
   "ar-MA" : "dd-MM-yyyy",
   "en-IE" : "dd/MM/yyyy",
   "es-PA" : "MM/dd/yyyy",
   "fr-MC" : "dd/MM/yyyy",
   "ar-TN" : "dd-MM-yyyy",
   "en-ZA" : "yyyy/MM/dd",
   "es-DO" : "dd/MM/yyyy",
   "ar-OM" : "dd/MM/yyyy",
   "en-JM" : "dd/MM/yyyy",
   "es-VE" : "dd/MM/yyyy",
   "ar-YE" : "dd/MM/yyyy",
   "en-029" : "MM/dd/yyyy",
   "es-CO" : "dd/MM/yyyy",
   "ar-SY" : "dd/MM/yyyy",
   "en-BZ" : "dd/MM/yyyy",
   "es-PE" : "dd/MM/yyyy",
   "ar-JO" : "dd/MM/yyyy",
   "en-TT" : "dd/MM/yyyy",
   "es-AR" : "dd/MM/yyyy",
   "ar-LB" : "dd/MM/yyyy",
   "en-ZW" : "M/d/yyyy",
   "es-EC" : "dd/MM/yyyy",
   "ar-KW" : "dd/MM/yyyy",
   "en-PH" : "M/d/yyyy",
   "es-CL" : "dd-MM-yyyy",
   "ar-AE" : "dd/MM/yyyy",
   "es-UY" : "dd/MM/yyyy",
   "ar-BH" : "dd/MM/yyyy",
   "es-PY" : "dd/MM/yyyy",
   "ar-QA" : "dd/MM/yyyy",
   "es-BO" : "dd/MM/yyyy",
   "es-SV" : "dd/MM/yyyy",
   "es-HN" : "dd/MM/yyyy",
   "es-NI" : "dd/MM/yyyy",
   "es-PR" : "dd/MM/yyyy",
   "am-ET" : "d/M/yyyy",
   "tzm-Latn-DZ" : "dd-MM-yyyy",
   "iu-Latn-CA" : "d/MM/yyyy",
   "sma-NO" : "dd.MM.yyyy",
   "mn-Mong-CN" : "yyyy/M/d",
   "gd-GB" : "dd/MM/yyyy",
   "en-MY" : "d/M/yyyy",
   "prs-AF" : "dd/MM/yy",
   "bn-BD" : "dd-MM-yy",
   "wo-SN" : "dd/MM/yyyy",
   "rw-RW" : "M/d/yyyy",
   "qut-GT" : "dd/MM/yyyy",
   "sah-RU" : "MM.dd.yyyy",
   "gsw-FR" : "dd/MM/yyyy",
   "co-FR" : "dd/MM/yyyy",
   "oc-FR" : "dd/MM/yyyy",
   "mi-NZ" : "dd/MM/yyyy",
   "ga-IE" : "dd/MM/yyyy",
   "se-SE" : "yyyy-MM-dd",
   "br-FR" : "dd/MM/yyyy",
   "smn-FI" : "d.M.yyyy",
   "moh-CA" : "M/d/yyyy",
   "arn-CL" : "dd-MM-yyyy",
   "ii-CN" : "yyyy/M/d",
   "dsb-DE" : "d. M. yyyy",
   "ig-NG" : "d/M/yyyy",
   "kl-GL" : "dd-MM-yyyy",
   "lb-LU" : "dd/MM/yyyy",
   "ba-RU" : "dd.MM.yy",
   "nso-ZA" : "yyyy/MM/dd",
   "quz-BO" : "dd/MM/yyyy",
   "yo-NG" : "d/M/yyyy",
   "ha-Latn-NG" : "d/M/yyyy",
   "fil-PH" : "M/d/yyyy",
   "ps-AF" : "dd/MM/yy",
   "fy-NL" : "d-M-yyyy",
   "ne-NP" : "M/d/yyyy",
   "se-NO" : "dd.MM.yyyy",
   "iu-Cans-CA" : "d/M/yyyy",
   "sr-Latn-RS" : "d.M.yyyy",
   "si-LK" : "yyyy-MM-dd",
   "sr-Cyrl-RS" : "d.M.yyyy",
   "lo-LA" : "dd/MM/yyyy",
   "km-KH" : "yyyy-MM-dd",
   "cy-GB" : "dd/MM/yyyy",
   "bo-CN" : "yyyy/M/d",
   "sms-FI" : "d.M.yyyy",
   "as-IN" : "dd-MM-yyyy",
   "ml-IN" : "dd-MM-yy",
   "en-IN" : "dd-MM-yyyy",
   "or-IN" : "dd-MM-yy",
   "bn-IN" : "dd-MM-yy",
   "tk-TM" : "dd.MM.yy",
   "bs-Latn-BA" : "d.M.yyyy",
   "mt-MT" : "dd/MM/yyyy",
   "sr-Cyrl-ME" : "d.M.yyyy",
   "se-FI" : "d.M.yyyy",
   "zu-ZA" : "yyyy/MM/dd",
   "xh-ZA" : "yyyy/MM/dd",
   "tn-ZA" : "yyyy/MM/dd",
   "hsb-DE" : "d. M. yyyy",
   "bs-Cyrl-BA" : "d.M.yyyy",
   "tg-Cyrl-TJ" : "dd.MM.yy",
   "sr-Latn-BA" : "d.M.yyyy",
   "smj-NO" : "dd.MM.yyyy",
   "rm-CH" : "dd/MM/yyyy",
   "smj-SE" : "yyyy-MM-dd",
   "quz-EC" : "dd/MM/yyyy",
   "quz-PE" : "dd/MM/yyyy",
   "hr-BA" : "d.M.yyyy.",
   "sr-Latn-ME" : "d.M.yyyy",
   "sma-SE" : "yyyy-MM-dd",
   "en-SG" : "d/M/yyyy",
   "ug-CN" : "yyyy-M-d",
   "sr-Cyrl-BA" : "d.M.yyyy",
   "es-US" : "M/d/yyyy"
};

   return formats[navigator.language] || 'dd/MM/yyyy';

} 

51
Warum ist diese Liste im Internet so schwer zu finden !!
Sidonaldson

6
Dies muss unabhängig von Groß- und Kleinschreibung sein. Meine Safari kehrt en-us zurück.
QuentinUK

2
Das lokale Format kann unterschiedlich sein (benutzerdefiniert), abhängig vom Betriebssystem
iegik

2
@Chexpir Das Unicode-CLDR-Projekt ist die ultimative Quelle dieser Liste, und github.com/unicode-cldr/cldr-dates-modern ist eine etwas konsumierbarere Version davon. Noch weit entfernt von den oben genannten Daten. :)
Paul Irish

4
@PaulIrish (new Intl.DateTimeFormat()).resolved.patternscheint nicht mehr vorhanden zu sein. Ich erhalteUncaught TypeError: Cannot read property 'pattern' of undefined und ich habe einen Chromfehler gesehen, der das entfernt. .resolvedOptions()funktioniert, schließt aber das Muster aus.
WebXL

65

Ich denke, das ist der beste Weg, es zu tun ...

    var date = new Date();

    var options = {
        weekday: "short",
        year: "numeric",
        month: "2-digit",
        day: "numeric"
    };

console.log(
    date.toLocaleDateString("en", options) //en is language option, you may specify..
);

Weitere Optionen und ihre Beispiele ....

 Option         Values and sample output

 weekday        narrow M
                short Mon
                long Monday

 year           2-digit 01
                numeric 2001

 month          2-digit 01
                numeric 1
                narrow J
                short Jan
                long January

day             2-digit 01
                numeric 1

hour            2-digit 12 AM
                numeric 12 AM

minute          2-digit 0
                numeric 0

second          2-digit 0
                numeric 0

timeZoneName    short 1/1/2001 GMT+00:00
                long 1/1/2001 GMT+00:00

Beachten Sie, dass der IE (ab 10) die Optionen nicht berücksichtigt und den Monatsnamen zurückgibt, unabhängig davon, was Sie angeben.
Whelkaholism

In Gesicht FF zeigt die neueste Version (25) das gleiche Verhalten; Es scheint, dass nur Chrome die Optionen unterstützt.
Whelkaholism

Safari ignoriert auch Optionen.
Wilsotc

1
Für alle, die dies jetzt treffen, ist die Unterstützung viel besser. Chrome und Firefox unterstützen beide die Optionen seit einiger Zeit, IE11 ab. Safari / Webkit immer noch nicht
TygerKrash

Das sind großartige Informationen. Es wäre sogar noch besser, wenn Sie eine Quelle für die Optionen verknüpfen würden.
Flipdoubt

13
function getLocaleShortDateString(d)
{
    var f={"ar-SA":"dd/MM/yy","bg-BG":"dd.M.yyyy","ca-ES":"dd/MM/yyyy","zh-TW":"yyyy/M/d","cs-CZ":"d.M.yyyy","da-DK":"dd-MM-yyyy","de-DE":"dd.MM.yyyy","el-GR":"d/M/yyyy","en-US":"M/d/yyyy","fi-FI":"d.M.yyyy","fr-FR":"dd/MM/yyyy","he-IL":"dd/MM/yyyy","hu-HU":"yyyy. MM. dd.","is-IS":"d.M.yyyy","it-IT":"dd/MM/yyyy","ja-JP":"yyyy/MM/dd","ko-KR":"yyyy-MM-dd","nl-NL":"d-M-yyyy","nb-NO":"dd.MM.yyyy","pl-PL":"yyyy-MM-dd","pt-BR":"d/M/yyyy","ro-RO":"dd.MM.yyyy","ru-RU":"dd.MM.yyyy","hr-HR":"d.M.yyyy","sk-SK":"d. M. yyyy","sq-AL":"yyyy-MM-dd","sv-SE":"yyyy-MM-dd","th-TH":"d/M/yyyy","tr-TR":"dd.MM.yyyy","ur-PK":"dd/MM/yyyy","id-ID":"dd/MM/yyyy","uk-UA":"dd.MM.yyyy","be-BY":"dd.MM.yyyy","sl-SI":"d.M.yyyy","et-EE":"d.MM.yyyy","lv-LV":"yyyy.MM.dd.","lt-LT":"yyyy.MM.dd","fa-IR":"MM/dd/yyyy","vi-VN":"dd/MM/yyyy","hy-AM":"dd.MM.yyyy","az-Latn-AZ":"dd.MM.yyyy","eu-ES":"yyyy/MM/dd","mk-MK":"dd.MM.yyyy","af-ZA":"yyyy/MM/dd","ka-GE":"dd.MM.yyyy","fo-FO":"dd-MM-yyyy","hi-IN":"dd-MM-yyyy","ms-MY":"dd/MM/yyyy","kk-KZ":"dd.MM.yyyy","ky-KG":"dd.MM.yy","sw-KE":"M/d/yyyy","uz-Latn-UZ":"dd/MM yyyy","tt-RU":"dd.MM.yyyy","pa-IN":"dd-MM-yy","gu-IN":"dd-MM-yy","ta-IN":"dd-MM-yyyy","te-IN":"dd-MM-yy","kn-IN":"dd-MM-yy","mr-IN":"dd-MM-yyyy","sa-IN":"dd-MM-yyyy","mn-MN":"yy.MM.dd","gl-ES":"dd/MM/yy","kok-IN":"dd-MM-yyyy","syr-SY":"dd/MM/yyyy","dv-MV":"dd/MM/yy","ar-IQ":"dd/MM/yyyy","zh-CN":"yyyy/M/d","de-CH":"dd.MM.yyyy","en-GB":"dd/MM/yyyy","es-MX":"dd/MM/yyyy","fr-BE":"d/MM/yyyy","it-CH":"dd.MM.yyyy","nl-BE":"d/MM/yyyy","nn-NO":"dd.MM.yyyy","pt-PT":"dd-MM-yyyy","sr-Latn-CS":"d.M.yyyy","sv-FI":"d.M.yyyy","az-Cyrl-AZ":"dd.MM.yyyy","ms-BN":"dd/MM/yyyy","uz-Cyrl-UZ":"dd.MM.yyyy","ar-EG":"dd/MM/yyyy","zh-HK":"d/M/yyyy","de-AT":"dd.MM.yyyy","en-AU":"d/MM/yyyy","es-ES":"dd/MM/yyyy","fr-CA":"yyyy-MM-dd","sr-Cyrl-CS":"d.M.yyyy","ar-LY":"dd/MM/yyyy","zh-SG":"d/M/yyyy","de-LU":"dd.MM.yyyy","en-CA":"dd/MM/yyyy","es-GT":"dd/MM/yyyy","fr-CH":"dd.MM.yyyy","ar-DZ":"dd-MM-yyyy","zh-MO":"d/M/yyyy","de-LI":"dd.MM.yyyy","en-NZ":"d/MM/yyyy","es-CR":"dd/MM/yyyy","fr-LU":"dd/MM/yyyy","ar-MA":"dd-MM-yyyy","en-IE":"dd/MM/yyyy","es-PA":"MM/dd/yyyy","fr-MC":"dd/MM/yyyy","ar-TN":"dd-MM-yyyy","en-ZA":"yyyy/MM/dd","es-DO":"dd/MM/yyyy","ar-OM":"dd/MM/yyyy","en-JM":"dd/MM/yyyy","es-VE":"dd/MM/yyyy","ar-YE":"dd/MM/yyyy","en-029":"MM/dd/yyyy","es-CO":"dd/MM/yyyy","ar-SY":"dd/MM/yyyy","en-BZ":"dd/MM/yyyy","es-PE":"dd/MM/yyyy","ar-JO":"dd/MM/yyyy","en-TT":"dd/MM/yyyy","es-AR":"dd/MM/yyyy","ar-LB":"dd/MM/yyyy","en-ZW":"M/d/yyyy","es-EC":"dd/MM/yyyy","ar-KW":"dd/MM/yyyy","en-PH":"M/d/yyyy","es-CL":"dd-MM-yyyy","ar-AE":"dd/MM/yyyy","es-UY":"dd/MM/yyyy","ar-BH":"dd/MM/yyyy","es-PY":"dd/MM/yyyy","ar-QA":"dd/MM/yyyy","es-BO":"dd/MM/yyyy","es-SV":"dd/MM/yyyy","es-HN":"dd/MM/yyyy","es-NI":"dd/MM/yyyy","es-PR":"dd/MM/yyyy","am-ET":"d/M/yyyy","tzm-Latn-DZ":"dd-MM-yyyy","iu-Latn-CA":"d/MM/yyyy","sma-NO":"dd.MM.yyyy","mn-Mong-CN":"yyyy/M/d","gd-GB":"dd/MM/yyyy","en-MY":"d/M/yyyy","prs-AF":"dd/MM/yy","bn-BD":"dd-MM-yy","wo-SN":"dd/MM/yyyy","rw-RW":"M/d/yyyy","qut-GT":"dd/MM/yyyy","sah-RU":"MM.dd.yyyy","gsw-FR":"dd/MM/yyyy","co-FR":"dd/MM/yyyy","oc-FR":"dd/MM/yyyy","mi-NZ":"dd/MM/yyyy","ga-IE":"dd/MM/yyyy","se-SE":"yyyy-MM-dd","br-FR":"dd/MM/yyyy","smn-FI":"d.M.yyyy","moh-CA":"M/d/yyyy","arn-CL":"dd-MM-yyyy","ii-CN":"yyyy/M/d","dsb-DE":"d. M. yyyy","ig-NG":"d/M/yyyy","kl-GL":"dd-MM-yyyy","lb-LU":"dd/MM/yyyy","ba-RU":"dd.MM.yy","nso-ZA":"yyyy/MM/dd","quz-BO":"dd/MM/yyyy","yo-NG":"d/M/yyyy","ha-Latn-NG":"d/M/yyyy","fil-PH":"M/d/yyyy","ps-AF":"dd/MM/yy","fy-NL":"d-M-yyyy","ne-NP":"M/d/yyyy","se-NO":"dd.MM.yyyy","iu-Cans-CA":"d/M/yyyy","sr-Latn-RS":"d.M.yyyy","si-LK":"yyyy-MM-dd","sr-Cyrl-RS":"d.M.yyyy","lo-LA":"dd/MM/yyyy","km-KH":"yyyy-MM-dd","cy-GB":"dd/MM/yyyy","bo-CN":"yyyy/M/d","sms-FI":"d.M.yyyy","as-IN":"dd-MM-yyyy","ml-IN":"dd-MM-yy","en-IN":"dd-MM-yyyy","or-IN":"dd-MM-yy","bn-IN":"dd-MM-yy","tk-TM":"dd.MM.yy","bs-Latn-BA":"d.M.yyyy","mt-MT":"dd/MM/yyyy","sr-Cyrl-ME":"d.M.yyyy","se-FI":"d.M.yyyy","zu-ZA":"yyyy/MM/dd","xh-ZA":"yyyy/MM/dd","tn-ZA":"yyyy/MM/dd","hsb-DE":"d. M. yyyy","bs-Cyrl-BA":"d.M.yyyy","tg-Cyrl-TJ":"dd.MM.yy","sr-Latn-BA":"d.M.yyyy","smj-NO":"dd.MM.yyyy","rm-CH":"dd/MM/yyyy","smj-SE":"yyyy-MM-dd","quz-EC":"dd/MM/yyyy","quz-PE":"dd/MM/yyyy","hr-BA":"d.M.yyyy.","sr-Latn-ME":"d.M.yyyy","sma-SE":"yyyy-MM-dd","en-SG":"d/M/yyyy","ug-CN":"yyyy-M-d","sr-Cyrl-BA":"d.M.yyyy","es-US":"M/d/yyyy"};

    var l=navigator.language?navigator.language:navigator['userLanguage'],y=d.getFullYear(),m=d.getMonth()+1,d=d.getDate();
    f=(l in f)?f[l]:"MM/dd/yyyy";
    function z(s){s=''+s;return s.length>1?s:'0'+s;}
    f=f.replace(/yyyy/,y);f=f.replace(/yy/,String(y).substr(2));
    f=f.replace(/MM/,z(m));f=f.replace(/M/,m);
    f=f.replace(/dd/,z(d));f=f.replace(/d/,d);
    return f;
}

mit:

shortedDate=getLocaleShortDateString(new Date(1992, 0, 7));


1
Dies funktioniert, aber leider kümmert es sich nicht um aus zwei Buchstaben bestehende Sprachcodes, die einige Browser senden (ich beziehe mich auf Firefox und gebe mir zB "da" anstelle von "da-DK"). Ich denke, ich werde nur die Zwei-Buchstaben-Codes für die Sprachen hinzufügen, die ich unterstützen möchte, aber die wirklich coole Lösung wäre, einen Sprachkulturnamen aus dem Zwei-Buchstaben-Code zu finden und standardmäßig zu verwenden.
Alvis

Hallo @ holden321 Kann ich die Ortszeit abrufen und in das Format TT / MM / JJJJ konvertieren? Ich habe eine Frage gestapelt stackoverflow.com/questions/36226676/…, aber jemand hilft mir nicht.
Avanish Kumar

1
Dies funktioniert im Browser, jedoch nicht in NodeJS. NodeJS erzeugt immer das gleiche Format mit den verschiedenen oben genannten Optionen.
Donato

10

Kann nicht gemacht werden.

Browserübergreifendes JavaScript kann das vom Benutzer ausgewählte tatsächliche Kurzdatumsformat nicht auf Plattformen verwenden, die eine solche regionale Anpassung bieten. Außerdem hat JavaScript große Lücken, wenn es um Formatierungen geht. Schauen Sie, wie viel Aufwand Null-Polsterung ist!

Sie können große Anstrengungen unternehmen, um die Spracheinstellung zu erhalten und das typische Format für dieses Gebietsschema zu erhalten. Das ist eine Menge Arbeit, wenn Sie nicht einmal wissen, ob es sich um das richtige Gebietsschema handelt (ich wette, dass internationale Sprachüberschriften oft falsch oder nicht spezifisch genug sind) oder wenn der Benutzer das Format an etwas anderes angepasst hat.

Sie können versuchen, Client-VBScript zu verwenden (das Funktionen für all diese regionalen Formatierungspermutationen bietet), aber das ist keine gute Idee, da es sich um eine aussterbende (tote?) IE-spezifische Technologie handelt.

Sie können auch versuchen, das Format mit Java / Flash / Silverlight zu ermitteln. Dies ist auch eine Menge zusätzlicher Arbeit, hat aber möglicherweise die besten Erfolgschancen. Sie möchten es für die Sitzung zwischenspeichern, um den Overhead zu minimieren.

Hoffentlich bietet das HTML5-Element <time> eine gewisse Erleichterung für die Anzeige von Datum und Uhrzeit in i18n.


8

Wenn Sie eine Frage zum <input type="date">Feld haben, finden Sie hier ein Skript zum Abrufen des value=""Dateiattributs:

(new Date()).toISOString().split('T')[0]

Sie können das Intl- Objekt ( ecma-402 ) verwenden, um Folgendes zu erhalten data-date-pattern="":

(new Intl.DateTimeFormat()).resolved.pattern // "M/d/y" for "en-US" in Google Chrome

Und schließlich, um das Datum im aktuellen l10n zu formatieren data-date="":

(new Intl.DateTimeFormat()).format(new Date());

Polyfill: https://github.com/andyearnshaw/Intl.js/issues/129


1
Ist das Objekt (neues Intl.DateTimeFormat ()) in den Standards aufgelöst? Es ist nicht in MDN ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) dokumentiert und funktioniert nicht in Firefox.
Vcarel

2
(new Intl.DateTimeFormat()).resolved.patterngeneriert einen Fehler in Google Chrome. (new Intl.DateTimeFormat()).resolvedist undefined. Dies ist keine Lösung zum Abrufen der Formatzeichenfolge, Sie können ((new Intl.DateTimeFormat()).format(new Date());jedoch eine formatierte Datumszeichenfolge abrufen.
Karl Wilbur

Fürs (new Intl.DateTimeFormat()).resolvedOptions()
Erste

@iegik resolvedOptionserzeugt nur grobe Daten (mindestens in Chrome 80), z. Informationen zur Länge der Jahresdarstellung, zur Reihenfolge der Datumskomponenten und zum Trennzeichen der Datumskomponenten fehlen.
Kollapsar

7

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat

Das Intl.DateTimeFormat-Objekt ist ein Konstruktor für Objekte, die eine sprachempfindliche Datums- und Uhrzeitformatierung ermöglichen.

var date = new Date(2014, 11, 31, 12, 30, 0);

var formatter = new Intl.DateTimeFormat("ru");
console.log( formatter.format(date) ); // 31.12.2014

var formatter = new Intl.DateTimeFormat("en-US");

console.log(formatter.format(date)); // 12/31/2014

Format Ihrer aktuellen Zone:

console.log(new Intl.DateTimeFormat(Intl.DateTimeFormat().resolvedOptions().locale).
format(new Date()))

5

Ich kenne keine Möglichkeit, dies zu tun (Sie können die Sprache abrufen und versuchen, das Gebietsschema davon abzuziehen).

Ich habe versucht, etwas zu kochen, um das zu versuchen (nur auf Firefox mit einem Gebietsschema getestet). sollte funktionieren, solange die kurze Datumszeichenfolge das Datum als Ziffern enthält, damit es beispielsweise für Arabisch fehlschlägt. Es könnte auch andere Fehler geben, ich kenne nicht die verschiedenen Besonderheiten der Region, dies ist nur ein Konzept ...

function getShortDateFormat() {
    var d = new Date(1992, 0, 7);
    var s = d.toLocaleDateString();

    function formatReplacer(str) {
        var num = parseInt(str);
        switch (num % 100) {
            case 92:
                return str.replace(/.{1}/g, "Y");
            case 1:
                return str.length == 1 ? "mM" : "MM"
            case 7:
                return str.length == 1 ? "dD" : "DD"
        }
    }

    shortDateFormat = s.replace(/\d+/g, formatReplacer);
    return shortDateFormat;
}

getShortDateFormat();

Das ausgegebene Format ist:

  • Y: Die Anzahl der Stellen, die Jahre darstellen
  • dD = kurzer Tag (dh wenn möglich nur eine Ziffer verwenden)
  • DD = Long Day Format (dh immer zweistellig)
  • mM / MM - seit Monaten gleich

In meinem Browser lautet das ShortDate-Format "MM / TT / JJJJ".


Ich bekomme: "Martes, TT de enero de JJJJ"
Álvaro González

Dann brauche ich natürlich noch etwas Arbeit :) (nur unter Firefox 3.5 / Linux getestet)
Amitay Dobo

Rückkehr undefiniert im Datum Teil auf Chrom 38 X11
Steel Brain

3

Dies hängt von der toLocaleDateString()Implementierung des Browsers ab . Zum Beispiel in Chrom erhalten Sie so etwas wie:Tuesday, January DD, YYYY


2

Leichte Änderung an Mitalis Antwort. Dynamische Generierung der Sprache für eine lokalere Lösung.

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

var date = new Date();

var options = {
   weekday: "short",
   year: "numeric",
   month: "2-digit",
   day: "numeric"
};

date.toLocaleDateString(lang, options);

2

Ich glaube, Sie können dieses verwenden:

new Date().toLocaleDateString();

Welche können Parameter für das Gebietsschema akzeptieren:

new Date().toLocaleDateString("en-us");
new Date().toLocaleDateString("he-il");

Ich sehe, dass es von Chrome, IE, Edge unterstützt wird, obwohl die Ergebnisse variieren können, macht es einen ziemlich guten Job für mich.


2
new Date(YOUR_DATE_STRING).toLocaleDateString(navigator.language)

~ Kombination der Antworten von oben


1

Es gibt keinen einfachen Weg. Wenn Sie eine zuverlässige, browserübergreifende Lösung wünschen, müssen Sie eine Nachschlagetabelle mit Datums- und Zeitformatzeichenfolgen nach Kultur erstellen. Um ein Datum zu formatieren, analysieren Sie die entsprechende Formatzeichenfolge, extrahieren Sie die relevanten Teile aus dem Datum, dh Tag, Monat, Jahr, und fügen Sie sie zusammen.

Dies ist im Wesentlichen das, was Microsoft mit seiner AJAX-Bibliothek macht, wie in der Antwort von @ no gezeigt.


1

Ich habe diesen Thread gefunden, als ich nach einer Möglichkeit gesucht habe, lokalisierte, aber kurze Daten in allen Browsern ohne zusätzliche Bibliothek zu generieren. Dies ist nur ein einfacher Aufruf zum Formatieren von vom Server generierten ISO-Daten.

Ich ging mit einer Kombination aus holden321 und mwrfs Antworten. Speichern der Formate außerhalb der Funktion, weil dies einfacher ist, und Speichern des aktuellen Gebietsschemaformats, weil es immer nützlich ist.

Die Funktion kann alles übergeben werden, was an einen Datumskonstruktor übergeben werden kann, um ein gültiges Datum zu erhalten, sowie eine Sprache oder ein Format für Flexibilität.

Sie müssen zuerst die Liste der Formate und ein paar weitere Dinge einrichten:

var LOCALE_DATE_FORMATS = {
  // as per mwrf's list
  ...
}

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

var LOCALE_DATE_FORMAT = LOCALE_DATE_FORMATS[LANG] || 'dd/MM/yyyy';

Dann ist die Funktion:

function getLocalizedDate(o, options)
{
    var res = '';
    var date = new Date(o);     

    if(o != null && !isNaN(date) && typeof(date.getFullYear) == 'function')
    {
        var d = date.getDate();
        var dd = d < 10 ? '0' + d : d;
        var M = date.getMonth() + 1;
        var MM = M < 10 ? '0' + M : M;
        var yyyy = date.getFullYear();
        var yy = new String(yyyy).substring(2);

        var format = LOCALE_DATE_FORMAT;

        if(options && options.lang)
            format = LOCALE_DATE_FORMATS[options.lang];
        else if(options && options.format)
            format = options.format;

        res = format
            .replace(/dd/g, dd)
            .replace(/d/g, d)
            .replace(/MM/g, MM)
            .replace(/M/g, M)
            .replace(/yyyy/g, yyyy)
            .replace(/yy/g, yy);
    }

    return res;
}

getLocalizedDate('2013-03-01T00:00:00', {lang:'sk-SK'}) = 1. 3. 2013

BEARBEITEN: Rufen Sie ohne Argumente auf, um das Gebietsschema des Benutzers zu verwenden.

getLocalizedDate('2013-03-01T00:00:00')= 01/03/2013(für mich)

Wenn Sie ein Fan von erweiterten Prototypen sind, werden die ersten Zeilen der Funktionsdefinition:

Date.prototype.getLocalized = function(options)
{
  var date = this;

Natürlich so genannt:

new Date('2013-03-01T00:00:00').getLocalized({lang:'sk-SK'}) = 1. 3. 2013

BEARBEITEN: Rufen Sie erneut ohne Argumente auf, um das Gebietsschema des Benutzers zu verwenden:

new Date('2013-03-01T00:00:00').getLocalized()= 01/03/2013(für mich)



-4

Versuchen Sie, Date.CultureInfo.formatPatterns.shortDate zu verwenden


3
Die Frage fragt nach Javascript, nicht nach C #.
Izzy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.