Pobierz Locale Short Date Format za pomocą javascript

87

Czy w ogóle możemy poznać używając JavaScript Short Date Format używanego w Panelu sterowania -> Ustawienia regionalne i językowe?

Wiem, że używając kombinacji poniższych, możemy uzyskać format długiej nazwy ustawień regionalnych

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

Ale nie ma bezpośredniej funkcji w JavaScript, takiej jak toLocaleShortDateString().

Czy są dostępne skrypty umożliwiające sprawdzenie ustawień użytkownika?

Dzięki.

lelol
źródło
Aby się upewnić, że rozumiem: masz na myśli gorąco, aby uzyskać sam format? ponieważ podana przez Ciebie nazwa „brakującej funkcji” jest myląca (toLocaleShortDateString), może coś w rodzaju „getLocaleShortDateFormat”?
Amitay Dobo
Uważam, że odpowiedzi na to pokrewne pytanie są bardziej pomocne dla moich celów, ponieważ chcę tylko zapewnić w połowie przyzwoitą wartość domyślną, dla której przydatne są przedstawione tam rozwiązania tylko dla klienta.
Kirk Woll,

Odpowiedzi:

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
źródło
51
Dlaczego ta lista jest tak trudna do znalezienia w Internecie !!
sidonaldson
6
To musi być bez rozróżniania wielkości liter, mój Safari zwraca en-us.
QuentinUK
2
Format lokalny może być inny (niestandardowy), zależy od systemu operacyjnego
iegik
2
@Chexpir Projekt Unicode CLDR jest ostatecznym źródłem tej listy, a github.com/unicode-cldr/cldr-dates-modern jest jego nieco bardziej użyteczną wersją. Wciąż daleki od powyższych danych. :)
Paul Irish
4
@PaulIrish (new Intl.DateTimeFormat()).resolved.patternwygląda na nieistniejącego. Rozumiem Uncaught TypeError: Cannot read property 'pattern' of undefinedi widziałem błąd chromu dotyczący usunięcia tego. .resolvedOptions()działa, ale wyklucza wzór.
webXL
66

Myślę, że to najlepszy sposób na zrobienie tego ...

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

Więcej opcji i ich przykłady ....

 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
źródło
Zauważ, że IE (od 10) nie respektuje opcji i zwróci nazwę miesiąca bez względu na to, co podasz.
Whelkaholism
W face FF najnowsza wersja (25) wykazuje takie samo zachowanie; wydaje się, że tylko Chrome obsługuje te opcje.
Whelkaholism
Safari również ignoruje opcje.
wilsotc
1
dla każdego, kto trafi w to teraz, obsługa jest znacznie lepsza. Chrome i Firefox od jakiegoś czasu obsługują obie opcje, IE11 i nowsze obsługują .. Safari / Webkit nadal nie działa
TygerKrash
To świetna informacja. Byłoby jeszcze lepiej, gdybyś utworzył link do źródła opcji.
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;
}

za pomocą:

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

holden321
źródło
1
To działa, ale niestety nie dba o dwuliterowe kody języków wysyłane przez niektóre przeglądarki (odnoszę się do firefoxa, podając mi np. „Da” zamiast „da-DK”). Myślę, że po prostu dodam dwuliterowe kody języków, które chcę obsługiwać, ale naprawdę fajnym rozwiązaniem byłoby znalezienie i ustawienie domyślnej nazwy kultury językowej z dwuliterowego kodu.
Alvis
Witaj @ holden321 Czy mogę uzyskać czas lokalny i przekonwertować go na format dd / MM / yyyy? Zadałem pytanie stackoverflow.com/questions/36226676/… ale nikt mi nie pomógł.
Avanish Kumar
1
Działa to w przeglądarce, ale nie w NodeJS. NodeJS zawsze tworzy ten sam format z różnymi opcjami powyżej.
Donato,
10

Nie da się zrobić.

JavaScript działający w różnych przeglądarkach nie ma możliwości wykorzystania rzeczywistego formatu daty krótkiej wybranego przez użytkownika na platformach, które oferują takie regionalne dostosowanie. Poza tym JavaScript ma ogromne luki, jeśli chodzi o jakiekolwiek formatowanie. Zobacz, ile kłopotów sprawia wypełnianie zerami!

Możesz dołożyć wszelkich starań, aby uzyskać ustawienie języka i uzyskać typowy format dla tej lokalizacji. To dużo pracy, gdy nie wiesz nawet, czy jest to poprawne ustawienie regionalne (założę się, że nagłówki w językach międzynarodowych są często nieprawidłowe lub niewystarczająco szczegółowe) lub jeśli użytkownik dostosował format do czegoś innego.

Możesz spróbować użyć klienta VBScript (który ma funkcje dla wszystkich tych regionalnych permutacji formatowania), ale to nie jest dobry pomysł, ponieważ jest to umierająca (martwa?) Technologia specyficzna dla IE.

Możesz także spróbować użyć Java / Flash / Silverlight, aby wykopać format. To także dużo dodatkowej pracy, ale może mieć największe szanse powodzenia. Chciałbyś zapisać go w pamięci podręcznej dla sesji, aby zminimalizować narzut.

Miejmy nadzieję, że element <time> HTML5 przyniesie pewną ulgę w wyświetlaniu daty / czasu i18n.

brianary
źródło
8

Jeśli masz pytanie dotyczące <input type="date">pola, oto skrypt do pobrania value=""atrybutu złożonego :

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

Możesz użyć obiektu Intl ( ecma-402 ), aby uzyskać data-date-pattern="":

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

I finnaly, aby format daty w bieżącym l10n, data-date="":

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

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

iegik
źródło
1
Czy obiekt (nowy Intl.DateTimeFormat ()) został rozwiązany w standardach? Nie jest udokumentowane w MDN ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ ... ) i nie działa w przeglądarce Firefox.
vcarel
2
(new Intl.DateTimeFormat()).resolved.patterngeneruje błąd w Google Chrome. (new Intl.DateTimeFormat()).resolvedjest undefined. Nie jest to rozwiązanie umożliwiające uzyskanie ciągu formatu, ale można go użyć ((new Intl.DateTimeFormat()).format(new Date());do uzyskania sformatowanego ciągu daty.
Karl Wilbur
Na razie (new Intl.DateTimeFormat()).resolvedOptions()- da ci formatowanie obiektu
iegik
@iegik resolvedOptionstworzy tylko przybliżone dane (przynajmniej w Chrome 80), np. brak informacji o długości reprezentacji roku, kolejności składników daty, separatorze składników daty.
zwiastun
7

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

Obiekt Intl.DateTimeFormat jest konstruktorem dla obiektów, które umożliwiają formatowanie daty i godziny z uwzględnieniem języka.

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 Twojej obecnej strefy:

console.log(new Intl.DateTimeFormat(Intl.DateTimeFormat().resolvedOptions().locale).
format(new Date()))
zloctb
źródło
5

Nie wiem, jak to zrobić (możesz zdobyć język i spróbować odliczyć z niego locale).

Próbowałem coś ugotować, żeby to zrobić (testowałem tylko w przeglądarce Firefox z jednym ustawieniem regionalnym). powinien działać, o ile krótki ciąg daty zawiera datę w postaci cyfr, więc może się nie powieść w przypadku, powiedzmy, języka arabskiego. Może mieć też inne błędy, nie znam osobliwości różnych lokalizacji, to tylko koncepcja ...

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

Format wyjściowy będzie następujący:

  • Y: liczba cyfr oznaczających lata
  • dD = krótki dzień (tzn. użyj tylko jednej cyfry, jeśli to możliwe)
  • DD = format dnia długiego (tj. Zawsze dwie cyfry)
  • mM / MM - to samo od miesięcy

W mojej przeglądarce format shortDate to „MM / DD / RRRR”.

Amitay Dobo
źródło
Otrzymuję: „martes, DD de enero de YYYY”
Álvaro González
W takim razie potrzebuję trochę więcej pracy :) (testowane tylko na Firefox 3.5 / Linux)
Amitay Dobo
powrót niezdefiniowanej części daty na chromie 38 X11
Steel Brain
3

Zależy to od toLocaleDateString()implementacji przeglądarki . Na przykład w chrome otrzymasz coś takiego:Tuesday, January DD, YYYY

Gonzalo
źródło
2

Nieznaczna modyfikacja odpowiedzi Mitali. Dynamiczne generowanie języka dla bardziej zlokalizowanego rozwiązania.

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
źródło
2

Myślę, że możesz użyć tego:

new Date().toLocaleDateString();

Które mogą akceptować parametry dla ustawień regionalnych:

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

Widzę, że jest obsługiwany przez chrome, IE, edge, chociaż wyniki mogą się różnić, to dla mnie całkiem niezła robota.

Shai Petel
źródło
2
new Date(YOUR_DATE_STRING).toLocaleDateString(navigator.language)

~ połączenie powyższych odpowiedzi

Boern
źródło
1

Nie ma łatwego sposobu. Jeśli potrzebujesz niezawodnego rozwiązania obsługującego wiele przeglądarek, musisz utworzyć tabelę wyszukiwania zawierającą ciągi formatu daty i godziny według kultury. Aby sformatować datę, przeanalizuj odpowiedni ciąg formatu, wyodrębnij odpowiednie części z daty, tj. Dzień, miesiąc, rok i dołącz je razem.

Jest to zasadniczo to, co robi Microsoft ze swoją biblioteką AJAX, jak pokazano w odpowiedzi @ no.

alekop
źródło
1

Znalazłem ten wątek, szukając sposobu na wygenerowanie zlokalizowanych, ale krótkich dat we wszystkich przeglądarkach bez dodatkowej biblioteki, wystarczy proste wywołanie formatowania dat ISO wygenerowanych przez serwer.

Poszedłem z kombinacją odpowiedzi holden321 i mwrf. Przechowywanie formatów zewnętrznych w stosunku do funkcji, ponieważ jest to wygodniejsze w ten sposób i przechowywanie bieżącego formatu ustawień regionalnych, ponieważ jest zawsze przydatne.

Do funkcji można przekazać wszystko, co można przekazać do konstruktora daty, aby uzyskać prawidłową datę, a także język lub format zapewniający elastyczność.

Najpierw musisz ustawić listę formatów i kilka innych rzeczy:

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

Wtedy funkcja jest taka:

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

EDYCJA: Wywołaj bez argumentów, aby użyć ustawień regionalnych użytkownika, oczywiście:

getLocalizedDate('2013-03-01T00:00:00') = 01/03/2013(dla mnie)

Jeśli jesteś fanem rozszerzania prototypów, pierwsze wiersze definicji funkcji wyglądają następująco:

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

Nazwany oczywiście tak:

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

EDYCJA: Ponownie, wywołaj bez argumentów, aby użyć ustawień regionalnych użytkownika:

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

Whelkaholizm
źródło
-3

Spróbuj tego:

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

Wszystkie formaty dla tej funkcji można znaleźć tutaj: http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html

user838708
źródło
4
używanie tej metody sprawiało mi tyle bólu, że musiałem ją wyrzucić. Chrome go nie rozpozna.
KevinDeus
Muszę zgodzić się z poprzednimi komentatorami: trzymaj się z daleka od tej funkcji, jeśli możesz.
ADi3ek
-5

Spróbuj użyć Date.CultureInfo.formatPatterns.shortDate

Ben
źródło
3
Pytanie dotyczy javascript, a nie C #.
Izzy