รับ Locale Short Date Format โดยใช้ javascript


93

อย่างไรก็ตามเราสามารถทราบได้หรือไม่โดยใช้ JavaScript รูปแบบวันที่แบบสั้นที่ใช้ในแผงควบคุม -> การตั้งค่าภูมิภาคและภาษา

ฉันรู้ว่าการใช้การรวมกันของการติดตามเราสามารถรับรูปแบบชื่อยาวโลแคลได้

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

แต่ไม่มีฟังก์ชันโดยตรงใน JavaScript เช่น toLocaleShortDateString()เช่น

มีสคริปต์ใดบ้างที่สามารถค้นหาว่าการตั้งค่าของผู้ใช้คืออะไร

ขอบคุณ.


เพื่อให้แน่ใจว่าฉันเข้าใจ: คุณหมายถึงร้อนที่จะได้รับรูปแบบเอง? เนื่องจากชื่อ "ฟังก์ชันที่ขาดหายไป" ที่คุณตั้งให้นั้นทำให้เข้าใจผิด (toLocaleShortDateString) อาจจะคล้าย ๆ "getLocaleShortDateFormat"?
Amitay Dobo

ฉันพบว่าคำตอบของคำถามที่เกี่ยวข้องนี้มีประโยชน์มากขึ้นสำหรับวัตถุประสงค์ของฉันเนื่องจากฉันต้องการให้ค่าเริ่มต้นที่เหมาะสมเพียงครึ่งเดียวซึ่งโซลูชันสำหรับลูกค้าเท่านั้นที่นำเสนอมีประโยชน์
Kirk Woll

คำตอบ:


184
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";
}

55
ทำไมรายการนี้ถึงหาดูยากในเน็ต !!
sidonaldson

6
สิ่งนี้จะต้องไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ Safari ของฉันจะส่งคืน en-us
QuentinUK

2
รูปแบบท้องถิ่นอาจแตกต่างกัน (กำหนดเอง) ขึ้นอยู่กับระบบปฏิบัติการ
iegik

2
@Chexpir โปรเจ็กต์ Unicode CLDR เป็นแหล่งที่มาที่ดีที่สุดของรายการนี้และgithub.com/unicode-cldr/cldr-dates-modernเป็นเวอร์ชันที่ใช้งานได้ง่ายกว่าเล็กน้อย ยังคงเป็นหนทางไกลจากข้อมูลข้างต้น :)
Paul Irish

4
@PaulIrish (new Intl.DateTimeFormat()).resolved.patternดูเหมือนจะสิ้นอายุขัย ฉันได้รับUncaught TypeError: Cannot read property 'pattern' of undefinedและฉันเห็นข้อบกพร่องของโครเมียมเกี่ยวกับการลบสิ่งนั้น .resolvedOptions()ใช้งานได้ แต่ไม่รวมรูปแบบ
webXL

72

ฉันคิดว่านี่เป็นวิธีที่ดีที่สุดที่จะทำ ...

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

ตัวเลือกเพิ่มเติมและตัวอย่างของพวกเขา ...

Option          Values          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'

โปรดทราบว่า IE (ณ วันที่ 10) ไม่เคารพตัวเลือกและจะส่งคืนชื่อเดือนตามที่คุณระบุ
Whelkaholism

ในหน้า FF เวอร์ชันล่าสุด (25) แสดงพฤติกรรมเดียวกัน ดูเหมือนว่า Chrome เท่านั้นที่รองรับตัวเลือกนี้
Whelkaholism

Safari ยังละเว้นตัวเลือกต่างๆ
wilsotc

1
สำหรับใครที่กดปุ่มนี้ตอนนี้การสนับสนุนจะดีกว่ามาก .. chrome & firefox ได้รองรับทั้งตัวเลือกบางครั้ง IE11 เป็นต้นไปรองรับ .. Safari / Webkit ยังไม่
TygerKrash

นี่เป็นข้อมูลที่ดี จะดียิ่งขึ้นถ้าคุณเชื่อมโยงกับแหล่งที่มาของตัวเลือกต่างๆ
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;
}

ใช้:

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


1
วิธีนี้ใช้งานได้ แต่ไม่มีการใช้งานโดยไม่ต้องดูแลรหัสภาษาสองตัวอักษรที่เบราว์เซอร์บางตัวส่งมา (ฉันขอให้ firefox ให้ฉันเช่น "da" แทนที่จะเป็น "da-DK") ฉันเดาว่าฉันจะเพิ่มรหัสสองตัวอักษรสำหรับภาษาที่ฉันต้องการสนับสนุน แต่ทางออกที่ยอดเยี่ยมจริงๆคือการค้นหาและตั้งค่าเริ่มต้นให้กับชื่อวัฒนธรรมภาษาบางรายการจากรหัสสองตัวอักษร
Alvis

สวัสดี @ holden321 ฉันขอเวลาท้องถิ่นและแปลงเป็นรูปแบบ dd / MM / yyyy ได้ไหม ฉันถามคำถามstackoverflow.com/questions/36226676/…แต่ไม่มีใครช่วยฉัน
Avanish Kumar

1
ใช้งานได้ในเบราว์เซอร์ แต่ใช้ไม่ได้ใน NodeJS NodeJS จะสร้างรูปแบบเดียวกันเสมอพร้อมกับตัวเลือกต่างๆด้านบน
Donato

10

ไม่สามารถทำได้

JavaScript ข้ามเบราว์เซอร์ไม่มีวิธีใช้รูปแบบวันที่จริงที่ผู้ใช้เลือกบนแพลตฟอร์มที่มีการปรับแต่งตามภูมิภาคดังกล่าว นอกจากนี้ JavaScript ยังมีช่องโหว่ขนาดใหญ่ที่เกี่ยวข้องกับการจัดรูปแบบใด ๆ ดูสิว่าการเติมเงินเป็นศูนย์จะยุ่งยากแค่ไหน!

คุณสามารถใช้ความยาวมากเพื่อรับการตั้งค่าภาษาและรับข้อมูลทั่วไปรูปแบบสำหรับโลแคลนั้น เป็นงานที่ต้องทำมากเมื่อคุณไม่รู้ด้วยซ้ำว่าเป็นภาษาที่ถูกต้องหรือไม่ (ฉันพนันได้เลยว่าส่วนหัวภาษาสากลมักไม่ถูกต้องหรือไม่เฉพาะเจาะจงเพียงพอ) หรือหากผู้ใช้ปรับแต่งรูปแบบเป็นอย่างอื่น

คุณสามารถลองใช้ไคลเอนต์ VBScript (ซึ่งมีฟังก์ชั่นสำหรับการเรียงสับเปลี่ยนการจัดรูปแบบภูมิภาคทั้งหมดนี้) แต่นั่นไม่ใช่ความคิดที่ดีเพราะเป็นเทคโนโลยีเฉพาะ IE ที่กำลังจะตาย (ตายแล้ว?)

คุณยังสามารถลองใช้ Java / Flash / Silverlight เพื่อขุดรูปแบบ นอกจากนี้ยังเป็นงานเสริมจำนวนมาก แต่อาจมีโอกาสประสบความสำเร็จมากที่สุด คุณต้องการแคชสำหรับเซสชันเพื่อลดค่าใช้จ่าย

หวังว่าองค์ประกอบ <เวลา> HTML5 จะช่วยบรรเทาการแสดงวันที่ / เวลาของ i18n ได้บ้าง


8

หากคุณมีคำถามเกี่ยวกับ<input type="date">ฟิลด์นี่คือสคริปต์สำหรับการยื่นvalue=""แอตทริบิวต์:

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

คุณสามารถใช้วัตถุIntl ( ecma-402 ) เพื่อรับdata-date-pattern="":

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

และ finnaly เพื่อจัดรูปแบบวันที่ใน l10n ปัจจุบันdata-date="":

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

โพลีฟิลล์: https://github.com/andyearnshaw/Intl.js/issues/129


1
ออบเจ็กต์ (Intl.DateTimeFormat ()) ใหม่ได้รับการแก้ไขในมาตรฐานหรือไม่ ไม่มีเอกสารใน MDN ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) และไม่ทำงานใน Firefox
vcarel

2
(new Intl.DateTimeFormat()).resolved.patternสร้างข้อผิดพลาดใน Google Chrome (new Intl.DateTimeFormat()).resolvedคือundefined. นี่ไม่ใช่วิธีแก้ปัญหาในการรับสตริงรูปแบบ แต่คุณสามารถใช้((new Intl.DateTimeFormat()).format(new Date());เพื่อรับสตริงวันที่ที่จัดรูปแบบได้
Karl Wilbur

สำหรับตอนนี้(new Intl.DateTimeFormat()).resolvedOptions()- จะให้รูปแบบออบเจ็กต์แก่คุณ
iegik

@iegik resolvedOptionsสร้างข้อมูลหยาบเท่านั้น (อย่างน้อยบน Chrome 80) เช่น ข้อมูลเกี่ยวกับการแสดงความยาวของปีลำดับของส่วนประกอบวันที่ตัวคั่นของส่วนประกอบวันที่จะหายไปทั้งหมด
ถล่ม

7

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

วัตถุ Intl.DateTimeFormat เป็นตัวสร้างสำหรับวัตถุที่เปิดใช้งานการจัดรูปแบบวันที่และเวลาที่ละเอียดอ่อนของภาษา

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

รูปแบบของโซนปัจจุบันของคุณ:

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

5

ฉันไม่รู้วิธีที่จะทำ (คุณสามารถรับภาษาและพยายามหักโลแคลจากสิ่งนั้น)

ฉันพยายามทำอาหารเล็กน้อยเพื่อลองทำสิ่งนั้น (ทดสอบบน Firefox ด้วยภาษาเดียวเท่านั้น) ควรใช้งานได้ตราบเท่าที่สตริงวันที่แบบสั้นมีวันที่เป็นตัวเลขดังนั้นจึงอาจใช้ไม่ได้สำหรับพูดภาษาอาหรับ มันอาจมีจุดบกพร่องอื่น ๆ ด้วยฉันไม่ทราบลักษณะเฉพาะของสถานที่ต่างๆทั้งหมดนี่เป็นเพียงแนวคิด ...

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

รูปแบบที่ส่งออกจะเป็น:

  • Y: จำนวนหลักแทนปี
  • dD = วันสั้น ๆ (เช่นใช้เพียงหนึ่งหลักเมื่อเป็นไปได้)
  • DD = รูปแบบวันยาว (เช่นตัวเลขสองหลักเสมอ)
  • mM / MM - เหมือนกันเป็นเวลาหลายเดือน

ดังนั้นในเบราว์เซอร์ของฉัน shortDateformat ที่คุณได้รับคือ "MM / DD / YYYY"


ฉันได้รับ: "martes, DD de Enero de YYYY"
ÁlvaroGonzález

เห็นได้ชัดว่าฉันต้องการงานเพิ่มเติม :) (ทดสอบเฉพาะบน Firefox 3.5 / Linux)
Amitay Dobo

กลับมาไม่ได้กำหนดในส่วนวันที่บน chrome 38 X11
Steel Brain

3

ขึ้นอยู่กับการtoLocaleDateString()ใช้งานของเบราว์เซอร์ ตัวอย่างเช่นใน chrome คุณจะได้รับสิ่งต่างๆเช่น:Tuesday, January DD, YYYY


3

ฉันเชื่อว่าคุณสามารถใช้อันนี้:

new Date().toLocaleDateString();

ซึ่งสามารถรับพารามิเตอร์สำหรับโลแคล:

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

ฉันเห็นว่ามันรองรับ chrome, IE, edge แม้ว่าผลลัพธ์อาจแตกต่างกันไป แต่ก็ทำได้ดีสำหรับฉัน


2

ปรับเปลี่ยนการตอบสนองของ Mitali เล็กน้อย เพื่อสร้างภาษาแบบไดนามิกสำหรับโซลูชันที่แปลเป็นภาษาท้องถิ่นมากขึ้น

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


1

ไม่มีวิธีง่ายๆ หากคุณต้องการโซลูชันข้ามเบราว์เซอร์ที่เชื่อถือได้คุณจะต้องสร้างตารางค้นหาวันที่และสตริงรูปแบบเวลาตามวัฒนธรรม ในการจัดรูปแบบวันที่ให้แยกวิเคราะห์สตริงรูปแบบที่เกี่ยวข้องแยกส่วนที่เกี่ยวข้องออกจากวันที่เช่นวันเดือนปีและต่อท้ายเข้าด้วยกัน

นี่คือสิ่งที่ Microsoft ทำกับไลบรารี AJAX ตามที่แสดงในคำตอบของ @ no


1

พบเธรดนี้ในขณะที่กำลังมองหาวิธีสร้างวันที่ที่แปลเป็นภาษาท้องถิ่น แต่สั้นในทุกเบราว์เซอร์โดยไม่ต้องมีไลบรารีเพิ่มเติมเพียงเรียกง่ายๆเพื่อฟอร์แมตเซิร์ฟเวอร์ที่สร้างวันที่ ISO

ฉันใช้คำตอบของ holden321 และ mwrf ร่วมกัน การจัดเก็บรูปแบบภายนอกไปยังฟังก์ชันเนื่องจากทำได้ง่ายกว่าและจัดเก็บรูปแบบโลแคลปัจจุบันเนื่องจากมีประโยชน์เสมอ

ฟังก์ชันนี้สามารถส่งผ่านอะไรก็ได้ที่สามารถส่งผ่านไปยังตัวสร้างวันที่เพื่อรับวันที่ที่ถูกต้องและยังมีภาษาหรือรูปแบบเพื่อความยืดหยุ่น

คุณต้องตั้งค่ารายการรูปแบบและอีกสองสามอย่างก่อน:

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

จากนั้นฟังก์ชั่นคือ:

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

แก้ไข: โทรโดยไม่มีข้อโต้แย้งเพื่อใช้ภาษาของผู้ใช้แน่นอน:

getLocalizedDate('2013-03-01T00:00:00')= 01/03/2013(สำหรับฉัน)

หากคุณเป็นแฟนตัวยงของการขยายต้นแบบบรรทัดแรกของนิยามฟังก์ชันจะกลายเป็น:

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

เรียกว่าแน่นอนดังนี้:

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

แก้ไข: อีกครั้งเรียกโดยไม่มีข้อโต้แย้งเพื่อใช้ภาษาของผู้ใช้:

new Date('2013-03-01T00:00:00').getLocalized()= 01/03/2013(สำหรับฉัน)


-3

ลองสิ่งนี้:

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

สามารถดูรูปแบบทั้งหมดสำหรับฟังก์ชันนี้ได้ที่นี่: http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html


4
การใช้วิธีนี้ทำให้ฉันเจ็บปวดมากจนต้องโยนมันทิ้ง Chrome จะไม่รู้จัก
KevinDeus

ฉันต้องเห็นด้วยกับผู้แสดงความคิดเห็นก่อนหน้านี้: อยู่ห่างจากฟังก์ชันนี้ถ้าคุณทำได้
ADi3ek

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.