Nhận định dạng ngày ngắn ngôn ngữ bằng javascript


87

Có bằng cách nào chúng ta có thể biết bằng cách sử dụng JavaScript Định dạng ngày ngắn được sử dụng trong Bảng điều khiển -> Cài đặt khu vực và ngôn ngữ không?

Tôi biết việc sử dụng kết hợp những điều sau đây, chúng ta có thể nhận được định dạng Tên dài địa phương

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

Nhưng không có chức năng trực tiếp trong JavaScript như toLocaleShortDateString().

Có bất kỳ tập lệnh nào có sẵn để tìm hiểu cài đặt người dùng là gì không?

Cảm ơn.


Chỉ để đảm bảo rằng tôi hiểu: ý bạn là muốn lấy chính định dạng? do tên "thiếu chức năng" mà bạn cung cấp gây hiểu lầm (toLocaleShortDateString), có thể giống như "getLocaleShortDateFormat"?
Amitay Dobo

Tôi thấy câu trả lời cho câu hỏi liên quan này hữu ích hơn cho mục đích của tôi vì tôi chỉ muốn cung cấp một nửa mặc định phù hợp mà các giải pháp chỉ dành cho máy khách được trình bày ở đó hữu ích.
Kirk Woll

Câu trả lời:


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

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

52
Tại sao danh sách này khó tìm thấy trên internet !!
sidonaldson

6
Điều này cần phải phân biệt chữ hoa chữ thường, Safari của tôi trả về en-us.
QuentinUK

2
Định dạng cục bộ có thể khác (tùy chỉnh), phụ thuộc vào hệ điều hành
tức là

2
@Chexpir Dự án Unicode CLDR là nguồn cuối cùng của danh sách này và github.com/unicode-cldr/cldr-dates-modern là một phiên bản dễ tiêu thụ hơn của nó. Vẫn khác xa so với số liệu trên. :)
Paul Ailen

4
@PaulIrish (new Intl.DateTimeFormat()).resolved.patterndường như không còn tồn tại. Tôi nhận được Uncaught TypeError: Cannot read property 'pattern' of undefinedvà tôi đã thấy một số lỗi crom về việc loại bỏ điều đó. .resolvedOptions()hoạt động, nhưng loại trừ mô hình.
webXL

66

Tôi nghĩ đây là cách tốt nhất để làm điều đó ...

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

Các tùy chọn khác và ví dụ của chúng ....

 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

Lưu ý rằng IE (kể từ 10) không tôn trọng các tùy chọn và sẽ trả về tên tháng bất cứ thứ gì bạn chỉ định.
Whelkaholism

Đối mặt với FF phiên bản mới nhất (25) thể hiện hành vi tương tự; Có vẻ như chỉ có Chrome hỗ trợ các tùy chọn.
Whelkaholism

Safari cũng bỏ qua các tùy chọn.
wilsotc

1
cho bất cứ ai chạm tại vùng hỗ trợ này nhiều hơn .. chrome & firefox đều ủng hộ các tùy chọn cho một thời gian, IE11 trở đi hỗ trợ .. Safari / Webkit vẫn không
TygerKrash

Đây là thông tin tuyệt vời. Sẽ tốt hơn nữa nếu bạn liên kết với một nguồn cho các tùy chọn.
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;
}

sử dụng:

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


1
Điều này hoạt động, nhưng không theo danh sách, nó không quan tâm đến các mã ngôn ngữ gồm hai chữ cái mà một số trình duyệt gửi (Tôi đang nhắc đến firefox, ví dụ: "da" thay vì "da-DK"). Tôi đoán tôi sẽ chỉ thêm các mã hai chữ cái cho các ngôn ngữ mà tôi muốn hỗ trợ, nhưng giải pháp thực sự tuyệt vời sẽ là tìm và đặt mặc định cho một số Tên Văn hóa Ngôn ngữ từ mã hai chữ cái.
Alvis

Xin chào @ holden321 Tôi có thể lấy giờ địa phương và chuyển đổi sang định dạng dd / MM / yyyy không? Tôi đã hỏi một câu hỏi stackoverflow.com/questions/36226676/… nhưng có ai không giúp tôi.
Avanish Kumar

1
Điều này hoạt động trong trình duyệt nhưng không hoạt động trong NodeJS. NodeJS sẽ luôn tạo ra cùng một định dạng với các tùy chọn khác nhau ở trên.
Donato

10

Không thể thực hiện được.

JavaScript trên nhiều trình duyệt không có cách nào để sử dụng định dạng ngày ngắn thực tế do người dùng chọn trên các nền tảng cung cấp tùy chỉnh theo vùng như vậy. Bên cạnh đó, JavaScript có những lỗ hổng lớn mà bất kỳ loại định dạng nào đều có liên quan. Hãy nhìn xem không có đệm phức tạp là bao nhiêu!

Bạn có thể tìm rất nhiều thời gian để có được cài đặt ngôn ngữ và lấy định dạng điển hình cho ngôn ngữ đó. Đó là rất nhiều công việc khi bạn thậm chí không biết liệu đó có phải là ngôn ngữ chính xác hay không (tôi dám cá rằng tiêu đề ngôn ngữ quốc tế thường không chính xác hoặc không đủ cụ thể) hoặc nếu người dùng đã tùy chỉnh định dạng thành một thứ khác.

Bạn có thể thử sử dụng VBScript ứng dụng khách (có các chức năng cho tất cả các hoán vị định dạng vùng này), nhưng đó không phải là một ý kiến ​​hay vì đó là một công nghệ dành riêng cho IE.

Bạn cũng có thể thử sử dụng Java / Flash / Silverlight để tìm định dạng. Đây cũng là một việc làm thêm rất nhiều, nhưng có thể có cơ hội thành công tốt nhất. Bạn muốn lưu nó vào bộ nhớ cache trong phiên để giảm thiểu chi phí.

Hy vọng rằng phần tử <time> của HTML5 sẽ giúp bạn hiển thị ngày / giờ i18n.


8

Nếu câu hỏi của bạn về <input type="date">trường, đây là tập lệnh để nhận value=""thuộc tính được phân loại:

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

Bạn có thể sử dụng đối tượng Intl ( ecma-402 ) để nhận data-date-pattern="":

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

Và finnaly, để định dạng ngày tháng trong l10n hiện tại, data-date="":

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

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


1
Đối tượng (Intl.DateTimeFormat ()). Có được giải quyết trong các tiêu chuẩn không? Nó không được ghi lại trong MDN ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) và không hoạt động trong Firefox.
vcarel

2
(new Intl.DateTimeFormat()).resolved.patterntạo ra lỗi trong Google Chrome. (new Intl.DateTimeFormat()).resolvedundefined. Đây không phải là giải pháp để lấy chuỗi định dạng, nhưng bạn có thể sử dụng ((new Intl.DateTimeFormat()).format(new Date());để lấy chuỗi ngày được định dạng.
Karl Wilbur

Hiện tại, (new Intl.DateTimeFormat()).resolvedOptions()- sẽ cung cấp cho bạn đối tượng định dạng
tức là

@iegik chỉ resolvedOptionstạo ra dữ liệu thô (ít nhất là trên Chrome 80), ví dụ: thông tin về thời lượng biểu diễn của năm, thứ tự của các thành phần ngày, dấu phân cách của các thành phần ngày đều bị thiếu.
sập

7

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

Đối tượng Intl.DateTimeFormat là một hàm khởi tạo cho các đối tượng cho phép định dạng ngày và giờ nhạy cảm với ngôn ngữ.

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

định dạng của vùng hiện tại của bạn:

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

5

Tôi không biết cách nào để làm điều đó (bạn có thể lấy ngôn ngữ và cố gắng loại trừ ngôn ngữ từ đó).

Tôi đã cố gắng nấu một chút gì đó để thử và làm điều đó (chỉ được thử nghiệm trên Firefox với một ngôn ngữ). sẽ hoạt động miễn là chuỗi ngày ngắn bao gồm ngày dưới dạng chữ số, vì vậy, nó có thể không thành công đối với tiếng Ả Rập. Nó cũng có thể có các lỗi khác, tôi không biết tất cả các đặc thù của các ngôn ngữ khác nhau, đây chỉ là một khái niệm ...

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

Định dạng đầu ra sẽ là:

  • Y: số chữ số đại diện cho năm
  • dD = ngày ngắn (tức là chỉ sử dụng một chữ số khi có thể)
  • DD = định dạng ngày dài (tức là luôn có hai chữ số)
  • mM / MM - giống nhau trong nhiều tháng

Vì vậy, trong trình duyệt của tôi, shortDateformat bạn nhận được là "MM / DD / YYYY".


Tôi nhận được: "martes, DD de enero de YYYY"
Álvaro González

Sau đó, rõ ràng là tôi cần một số công việc thêm về nó :) (chỉ thử nghiệm trên Firefox 3.5 / Linux)
Amitay Dobo

việc trở về của undefined trong ngày phần trên chrome 38 X11
Thép Brain

3

Điều này phụ thuộc vào việc toLocaleDateString()triển khai của trình duyệt . Ví dụ trong chrome, bạn sẽ nhận được một cái gì đó như:Tuesday, January DD, YYYY


2

Sửa đổi một chút đối với phản ứng của Mitali. Để tự động tạo ngôn ngữ cho một giải pháp bản địa hóa hơn.

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

Tôi tin rằng bạn có thể sử dụng cái này:

new Date().toLocaleDateString();

Cái nào có thể chấp nhận các tham số cho ngôn ngữ:

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

Tôi thấy nó được hỗ trợ bởi chrome, IE, edge, mặc dù kết quả có thể khác nhau, nó hoạt động khá tốt đối với tôi.


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

~ kết hợp các câu trả lời ở trên


1

Không có con đường nào dễ dàng. Nếu bạn muốn có một giải pháp trình duyệt chéo, đáng tin cậy, bạn phải xây dựng một bảng tra cứu chuỗi định dạng ngày và giờ, theo văn hóa. Để định dạng một ngày, hãy phân tích cú pháp chuỗi định dạng tương ứng, trích xuất các phần có liên quan từ ngày, tức là ngày, tháng, năm và nối chúng lại với nhau.

Về cơ bản đây là những gì Microsoft làm với thư viện AJAX của họ, như được hiển thị trong câu trả lời của @ no.


1

Tìm thấy chuỗi này trong khi đang tìm cách tạo ngày tháng ngắn nhưng được bản địa hóa trong tất cả các trình duyệt mà không cần bất kỳ thư viện bổ sung nào, chỉ cần một lệnh gọi đơn giản để định dạng ngày tháng theo ISO do máy chủ tạo.

Tôi đã kết hợp các câu trả lời của holden321 và mwrf. Lưu trữ các định dạng bên ngoài hàm vì theo cách đó sẽ tiện hơn và lưu trữ định dạng ngôn ngữ hiện tại vì nó luôn hữu ích.

Hàm có thể được truyền bất kỳ thứ gì có thể được truyền cho một phương thức khởi tạo ngày để có được một ngày hợp lệ, và cả ngôn ngữ hoặc định dạng để linh hoạt.

Trước tiên, bạn cần thiết lập danh sách các định dạng và một vài điều nữa:

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

Khi đó, hàm là:

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

CHỈNH SỬA: Gọi không có đối số để sử dụng ngôn ngữ của người dùng, tất nhiên:

getLocalizedDate('2013-03-01T00:00:00')= 01/03/2013(cho tôi)

Nếu bạn là người thích mở rộng các nguyên mẫu, những dòng đầu tiên của định nghĩa hàm sẽ trở thành:

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

Tất nhiên được gọi như thế này:

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

CHỈNH SỬA: Một lần nữa, gọi không có đối số để sử dụng ngôn ngữ của người dùng:

new Date('2013-03-01T00:00:00').getLocalized()= 01/03/2013(cho tôi)


-3

Thử đi:

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

Tất cả các định dạng cho chức năng này có thể được tìm thấy tại đây: http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html


4
sử dụng phương pháp này khiến tôi đau đớn đến mức tôi phải ném nó ra ngoài. Chrome sẽ không nhận ra nó.
KevinDeus

Tôi phải đồng ý với những người bình luận trước đây: Hãy tránh xa chức năng này nếu bạn có thể.
ADi3ek

-5

Cố gắng sử dụng Date.CultureInfo.formatPatterns.shortDate


3
Câu hỏi yêu cầu javascript, không phải C #.
Izzy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.