Obtenir le format de date abrégé des paramètres régionaux à l'aide de javascript

87

Y a-t-il de toute façon que nous pouvons savoir en utilisant JavaScript le format de date courte utilisé dans le panneau de configuration -> Paramètres régionaux et linguistiques?

Je sais que l'utilisation de la combinaison des éléments suivants nous permet d'obtenir le format de nom long des paramètres régionaux

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

Mais il n'y a pas de fonction directe dans JavaScript comme toLocaleShortDateString().

Existe-t-il des scripts disponibles pour connaître le paramètre utilisateur?

Merci.

lelol
la source
Juste pour être sûr de bien comprendre: vous voulez dire chaud pour obtenir le format lui-même? parce que le nom de "fonction manquante" que vous donnez est trompeur (toLocaleShortDateString), peut-être quelque chose comme "getLocaleShortDateFormat"?
Amitay Dobo
J'ai trouvé les réponses à cette question connexe plus utiles pour mes besoins, car je veux simplement fournir une valeur par défaut à moitié décente pour laquelle les solutions réservées au client présentées ici sont utiles.
Kirk Woll

Réponses:

171
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
la source
51
Pourquoi cette liste est-elle si difficile à trouver sur Internet !!
sidonaldson
6
Cela doit être insensible à la casse, mon Safari revient en-nous.
QuentinUK
2
Le format local peut être différent (personnalisé), dépend du système d'exploitation
iegik
2
@Chexpir Le projet Unicode CLDR est la source ultime de cette liste, et github.com/unicode-cldr/cldr-dates-modern en est une version légèrement plus consommable. Encore loin des données ci-dessus. :)
Paul Irish
4
@PaulIrish (new Intl.DateTimeFormat()).resolved.patternsemble avoir disparu. Je reçois Uncaught TypeError: Cannot read property 'pattern' of undefinedet j'ai vu un bug de chrome sur la suppression de cela. .resolvedOptions()fonctionne, mais exclut le modèle.
webXL
66

Je pense que c'est la meilleure façon de le faire ...

    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..
);

Plus d'options et leurs exemples ...

 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
la source
Notez que IE (à partir de 10) ne respecte pas les options et renverra le nom du mois tout ce que vous spécifiez.
Whelkaholism
In face FF dernière version (25) présente le même comportement; il semble que seul Chrome prend en charge les options.
Whelkaholism
Safari ignore également les options.
wilsotc
1
pour quiconque frappe ce support maintenant est bien meilleur .. Chrome et Firefox ont tous deux pris en charge les options pendant un certain temps, IE11 et les versions ultérieures. Safari / Webkit ne le fait toujours pas
TygerKrash
Ce sont d'excellentes informations. Ce serait encore mieux si vous vous connectez à une source pour les options.
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;
}

en utilisant:

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

holden321
la source
1
Cela fonctionne, mais sans court terme, il ne prend pas en charge les codes de langue à deux lettres que certains navigateurs envoient (je fais référence à Firefox en me donnant par exemple "da" au lieu de "da-DK"). Je suppose que je vais simplement ajouter les codes à deux lettres pour les langues que je souhaite prendre en charge, mais la solution vraiment cool serait de trouver et d'utiliser par défaut un nom de culture linguistique à partir du code à deux lettres.
Alvis
Hello @ holden321 Puis-je obtenir l'heure locale et convertir au format jj / MM / aaaa? J'ai posé une question stackoverflow.com/questions/36226676/... mais personne ne m'aide.
Avanish Kumar
1
Cela fonctionne dans le navigateur mais pas dans NodeJS. NodeJS produira toujours le même format avec les différentes options ci-dessus.
Donato
10

Ça ne peut pas être fait.

JavaScript inter-navigateurs n'a aucun moyen d'utiliser le format de date courte réel sélectionné par l'utilisateur sur les plates-formes qui offrent une telle personnalisation régionale. En outre, JavaScript a d'énormes trous en ce qui concerne toute sorte de formatage. Regardez à quel point le remplissage zéro est compliqué!

Vous pouvez faire de gros efforts pour obtenir le paramètre de langue et obtenir le format typique pour cette langue . C'est beaucoup de travail quand vous ne savez même pas si c'est la bonne locale (je parie que les en-têtes de langue internationale sont souvent incorrects ou pas assez spécifiques), ou si l'utilisateur a personnalisé le format à autre chose.

Vous pouvez essayer d'utiliser le client VBScript (qui a des fonctions pour toutes ces permutations de formatage régional), mais ce n'est pas une bonne idée car c'est une technologie spécifique à IE mourante (morte?).

Vous pouvez également essayer d'utiliser Java / Flash / Silverlight pour déterrer le format. C'est aussi beaucoup de travail supplémentaire, mais cela peut avoir les meilleures chances de succès. Vous voudrez le mettre en cache pour la session afin de minimiser la surcharge.

Espérons que l'élément HTML5 <time> fournira un certain soulagement pour l'affichage de la date / heure i18n.

Brianary
la source
8

Si votre question sur le <input type="date">champ, voici le script pour obtenir l' value=""attribut classé :

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

Vous pouvez utiliser l' objet Intl ( ecma-402 ) pour obtenir data-date-pattern="":

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

Et en fin de compte, pour mettre en forme la date dans le l10n actuel data-date="":

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

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

Iegik
la source
1
L'objet (new Intl.DateTimeFormat ()). Est-il résolu dans les normes? Il n'est pas documenté dans MDN ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) et ne fonctionne pas dans Firefox.
vcarel
2
(new Intl.DateTimeFormat()).resolved.patterngénère une erreur dans Google Chrome. (new Intl.DateTimeFormat()).resolvedest undefined. Ce n'est pas une solution pour obtenir la chaîne de format, mais vous pouvez l'utiliser ((new Intl.DateTimeFormat()).format(new Date());pour obtenir une chaîne de date formatée.
Karl Wilbur
Pour l'instant, (new Intl.DateTimeFormat()).resolvedOptions()- vous donnera un objet de format
iegik
@iegik resolvedOptionsproduit uniquement des données grossières (au moins sur Chrome 80), par exemple. les informations sur la longueur de la représentation de l'année, l'ordre des composants de date, le séparateur des composants de date sont tous manquants.
collapsar le
7

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

L'objet Intl.DateTimeFormat est un constructeur pour les objets qui permettent la mise en forme de la date et de l'heure sensible à la langue.

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 de votre zone actuelle:

console.log(new Intl.DateTimeFormat(Intl.DateTimeFormat().resolvedOptions().locale).
format(new Date()))
zloctb
la source
5

Je ne connais pas de moyen de faire cela (vous pouvez obtenir la langue et essayer d'en déduire les paramètres régionaux).

J'ai essayé de cuisiner un petit quelque chose pour essayer de le faire (testé uniquement sur Firefox avec un seul paramètre régional). devrait fonctionner tant que la chaîne de date courte inclut la date sous forme de chiffres, de sorte qu'elle peut échouer, par exemple, pour l'arabe. Cela peut aussi avoir d'autres bugs, je ne connais pas toutes les particularités des différentes locales, ce n'est qu'un concept ...

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();

Le format de sortie sera:

  • Y: le nombre de chiffres pour représenter les années
  • dD = jour court (c.-à-d. n'utiliser qu'un seul chiffre si possible)
  • DD = format de jour long (c'est-à-dire toujours deux chiffres)
  • mM / MM - idem pendant des mois

Donc, dans mon navigateur, le shortDateformat que vous obtenez est "MM / JJ / AAAA".

Amitay Dobo
la source
J'obtiens: "martes, DD de enero de YYYY"
Álvaro González
Alors évidemment, j'ai besoin d'un peu plus de travail dessus :) (testé uniquement sur Firefox 3.5 / Linux)
Amitay Dobo
retour indéfini dans la partie date sur chrome 38 X11
Steel Brain
3

Cela dépend de l' toLocaleDateString()implémentation du navigateur . Par exemple, dans Chrome, vous obtiendrez quelque chose comme:Tuesday, January DD, YYYY

Gonzalo
la source
2

Légère modification de la réponse de Mitali. Pour générer dynamiquement le langage pour une solution plus localisée.

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
la source
2

Je pense que vous pouvez utiliser celui-ci:

new Date().toLocaleDateString();

Qui peut accepter des paramètres pour les paramètres régionaux:

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

Je vois qu'il est pris en charge par chrome, IE, edge, bien que les résultats puissent varier, cela fait un très bon travail pour moi.

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

~ combinaison de réponses ci-dessus

Boern
la source
1

Il n'y a pas de moyen facile. Si vous voulez une solution fiable et multi-navigateurs, vous devez créer une table de recherche de chaînes de format de date et d'heure, par culture. Pour mettre en forme une date, analysez la chaîne de format correspondante, extrayez les parties pertinentes de la date, c'est-à-dire jour, mois, année, et ajoutez-les ensemble.

C'est essentiellement ce que Microsoft fait avec sa bibliothèque AJAX, comme indiqué dans la réponse @ no.

Alekop
la source
1

J'ai trouvé ce fil en cherchant un moyen de générer des dates localisées mais courtes dans tous les navigateurs sans aucune bibliothèque supplémentaire, juste un simple appel pour formater les dates ISO générées par le serveur.

Je suis allé avec une combinaison de réponses holden321 et mwrf. Stocker les formats externes à la fonction car c'est plus pratique de cette façon et stocker le format local actuel car c'est toujours utile

La fonction peut recevoir tout ce qui peut être passé à un constructeur de date pour obtenir une date valide, ainsi qu'un langage ou un format pour plus de flexibilité.

Vous devez d'abord configurer la liste des formats et quelques autres choses:

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

Alors la fonction est:

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

EDIT: Appel sans argument pour utiliser les paramètres régionaux de l'utilisateur, bien sûr:

getLocalizedDate('2013-03-01T00:00:00')= 01/03/2013(pour moi)

Si vous êtes fan des prototypes étendus, les premières lignes de la définition de fonction deviennent:

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

Appelé bien sûr comme ceci:

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

EDIT: Encore une fois, appelez sans argument pour utiliser les paramètres régionaux de l'utilisateur:

new Date('2013-03-01T00:00:00').getLocalized()= 01/03/2013(pour moi)

Whelkaholism
la source
-3

Essaye ça:

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

Tous les formats de cette fonction peuvent être trouvés ici: http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html

user838708
la source
4
l'utilisation de cette méthode m'a causé tellement de douleur que j'ai dû la jeter. Chrome ne le reconnaîtra pas.
KevinDeus
Je suis d'accord avec les commentateurs précédents: éloignez-vous de cette fonction si vous le pouvez.
ADi3ek
-5

Essayez d'utiliser Date.CultureInfo.formatPatterns.shortDate

Ben
la source
3
La question demande javascript, pas C #.
Izzy