2010-03-05 60 views
48

无论如何,我们可以使用JavaScript在控制面板 - >区域和语言设置中使用短日期格式吗?使用javascript获取语言环境短日期格式

我知道用以下我们可以得到区域设置长名称格式

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

的组合,但没有直接作用在JavaScript像toLocaleShortDateString()

是否有任何脚本可用来找出用户设置是什么?

谢谢。

+0

只是为了确保我的理解:你的意思是热拿到格式本身?因为你给的“缺失函数”的名称是误导(toLocaleShortDateString),也许像“getLocaleShortDateFormat”? – 2010-03-05 21:38:25

+0

我发现这个[相关问题](http://stackoverflow.com/questions/673905/best-way-to-determine-users-locale-within-browser)的答案更有助于我的目的,因为我只是想提供一个半体面的默认值,其中仅提供客户端解决方案是有用的。 – 2014-09-25 04:54:42

回答

4

我不知道有一种方法可以做到这一点(你可以get the language并尝试从中扣除语言环境)。

我试着做点小事来尝试做到这一点(仅在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 - 同几个月

所以在我的浏览器中,你得到的shortDateformat是“MM/DD/YYYY”。

+0

我得到:“martes,DD de enero de YYYY” – 2010-03-09 15:24:56

+0

然后显然我需要更多的工作:)(仅在Firefox 3.5/Linux上测试) – 2010-03-13 18:36:31

+0

返回未定义的日期部分在铬38 X11 – 2014-07-21 23:36:56

2

这取决于浏览器的toLocaleDateString()实现。 例如在Chrome中,您将看到如下所示的内容:“星期二,一月DD,YYYY”

8

无法完成。

跨浏览器JavaScript无法使用用户在提供此类区域定制的平台上选择的实际短日期格式。此外,JavaScript在任何形式的格式方面都有巨大的漏洞。看看有多少麻烦零填充!

您可以尽力获取语言设置,并获取格式的该语言环境。当你甚至不知道它是否是正确的语言环境时(我敢打赌,国际语言头文件通常不正确或不够具体),或者如果用户已将该格式定制为其他内容,那么这是很多工作。

您可以尝试使用客户端VBScript(它具有所有这些区域格式排列的功能),但这不是一个好主意,因为它是一种即将死去的(死了的)特定于IE的技术。

您也可以尝试使用Java/Flash/Silverlight来挖掘格式。这也是一项额外的工作,但可能有最好的成功机会。你想要缓存它的会话,以尽量减少开销。

希望HTML5 <时间>元素将为i18n日期/时间显示提供一些缓解。

1

有没有简单的方法。如果你想要一个可靠的,跨浏览器的解决方案,你必须建立一个日期和时间格式字符串查找表,文化。要格式化日期,请解析相应的格式字符串,从日期(即日,月,年)提取相关部分,然后将它们附加在一起。

这实质上就是微软对他们的AJAX库所做的事情,如@ no的答案所示。

12
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

这工作,但unfourtunatelly它不会处理一些浏览器发送的双字母语言代码(我认为firefox给了我例如“da”而不是“da-DK”)。我想我会为我想支持的语言添加双字母代码,但真正很酷的解决方案是从两个字母的代码中找到并默认使用某些语言文化名称。 – Alvis 2013-11-21 16:24:03

+0

Hello @ holden321我可以获得本地时间并转换为dd/MM/yyyy格式吗?我问了一个问题http://stackoverflow.com/questions/36226676/how-to-convert-date-and-time-convert-into-different-2-zone但任何人都不帮助我。 – 2016-03-26 07:00:58

-1

试试这个:

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

所有格式此功能可以在这里找到: http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html

+2

仅适用于Firefox – 2012-06-08 23:53:39

+3

使用此方法给我带来了太多的痛苦,我不得不抛弃它。 Chrome将无法识别它。 – KevinDeus 2012-08-27 22:08:56

+0

我必须同意以前的评论者:如果可以,请远离此功能。 – ADi3ek 2013-07-05 10:31:38

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

} 
+4

为什么这个清单很难在互联网上找到! – sidonaldson 2014-11-28 15:54:00

+4

这需要不区分大小写,我的Safari返回en-us。 – QuentinUK 2015-03-14 01:21:40

+0

本地格式可以不同(自定义),取决于操作系统 – iegik 2016-07-14 10:59:44

19

我认为这是最好这样做...

var date = new Date(); 

var options = { 
    weekday: "short", 
    year: "numeric", 
    month: "2-digit", 
    day: "numeric" 
}; 

date.toLocaleDateString("en", options);//en is language option, you may specify.. 

更多选项和他们的例子....

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 
+0

请注意,IE(截至10)不尊重这些选项,并且会返回您指定的月份名称。 – Whelkaholism 2013-10-31 15:46:06

+0

面对FF最新版本(25)表现出相同的行为;似乎只有Chrome支持这些选项。 – Whelkaholism 2013-10-31 15:51:47

+0

Safari也会忽略选项。 – wilsotc 2015-09-01 14:05:05

0

轻微修改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

,同时寻找一种方式来产生所有的浏览器本地化,但短日期,没有任何额外的库,只是一个简单的调用格式服务器生成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(对我来说)

0

尝试使用Date.CultureInfo.formatPatterns.shortDate

+1

问题要求javascript,而不是C#。 – Izzy 2015-09-03 10:47:35

0

我相信你可以用这一个: 新的Date()toLocaleDateString()。可以接受区域参数: new Date()。toLocaleDateString(“en-us”); new Date()。toLocaleDateString(“he-il”);

我看到它支持铬,IE浏览器,边缘,虽然结果可能会有所不同,但它对我来说确实不错。

3

如果您的问题有关<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

+0

是否在标准中解析了对象(新的Intl.DateTimeFormat())?它没有记录在MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat)中,并且在Firefox中不起作用。 – vcarel 2016-07-13 08:59:25

+0

@vcarel https://github.com/tc39/ecma402/issues/21 – iegik 2016-07-14 10:56:54

3

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

The Intl.DateTimeFormat object is a constructor for objects that enable language sensitive date and time formatting.

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

您当前区域的格式:

console.log( new Intl.DateTimeFormat(Intl.DateTimeFormat().resolvedOptions().locale). 
format(new Date())) 
相关问题