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.

lelol
quelle
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';

} 
mwrf
quelle
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
Mitali
quelle
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));

holden321
quelle
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.

brianary
quelle
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

iegik
quelle
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()))
zloctb
quelle
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".

Amitay Dobo
quelle
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

Gonzalo
quelle
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);
Brandon Nozaki Miller
quelle
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.

Shai Petel
quelle
2
new Date(YOUR_DATE_STRING).toLocaleDateString(navigator.language)

~ Kombination der Antworten von oben

Boern
quelle
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.

Alekop
quelle
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)

Whelkaholism
quelle
-3

Versuche dies:

new Date().toLocaleFormat("%x");

Alle Formate für diese Funktion finden Sie hier: http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html

user838708
quelle
3
Diese Methode verursachte mir so viele Schmerzen, dass ich sie wegwerfen musste. Chrome erkennt es nicht.
KevinDeus
Ich muss früheren Kommentatoren zustimmen: Halten Sie sich von dieser Funktion fern, wenn Sie können.
ADi3ek
-4

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

Ben
quelle
3
Die Frage fragt nach Javascript, nicht nach C #.
Izzy