语言环境“默认”格式不正确

时间:2019-07-30 10:34:19

标签: javascript microsoft-edge

以下代码段是从JavaScript中的date对象获取月份的。

const date = new Date(dateValue);
const month = date.toLocaleString('default', { month: 'short' });

例如:如果日期类似于30/07/2019,它将返回Nov

这在Chrome中正常运行,但在Edge浏览器中失败,并显示错误:

  

SCRIPT5121:SCRIPT5121:语言环境“默认”格式不正确

我的Edge浏览器版本为41.16299.1004.0

这是一个jsfiddle:https://jsfiddle.net/1dwcv9xu/1

根据MDN,{:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString#Browser_compatibility”完全支持date.toLocaleString

我也没有在Edge的MSDN文档中找到此错误代码:https://docs.microsoft.com/en-us/microsoft-edge/devtools-guide/console/error-and-status-codes

有没有一种方法可以解决此问题,或者可以采用其他任何方法以mmm格式获得月份?

5 个答案:

答案 0 :(得分:2)

根据Phuzi的建议,我更改为

date.toLocaleString('en-GB', { month: 'short' })

然后它开始在IE 11中工作,但在IE 10中不工作。 所以我采用了经典Javascript方法

答案 1 :(得分:1)

可能看起来很疯狂,但是使用undefined而不是default可以解决IE11中的错误,并且可以在我检查过的所有主要浏览器(Mac / Windows)中使用。

const date = new Date(dateValue);
const month = date.toLocaleString(undefined, { month: 'short' });

答案 2 :(得分:1)

回答这个是为了完整性。

为了使用带有 options 参数的默认语言环境,您应该始终将空数组或 undefined 传递给 locales 参数。 >

toLocaleString()locales 参数跟在 Intl.DateTimeFormat 之后。来自 MDN:

<块引用>

要使用浏览器的默认语言环境,请传递一个空数组

通过 undefined will have the same effect as using an empty array

传递字符串“default”适用于大多数现代浏览器,但“defaul”或任何无效的语言环境也适用。这是因为大多数 如果浏览器无法解析,浏览器将退回到默认语言环境;这不能保证有效,也不应该预期有效,因为它的用法不正确。

此外,options 参数在旧版浏览器中完全被忽略,但如果同时使用 locales 参数,仍会正确解析。

答案 3 :(得分:0)

由于我没有找到解决问题的方法,因此我使用了一种可能适用于所有浏览器的替代方法:

const date = new Date(dateValue);
//const month = date.toLocaleString('default', { month: 'short' });
const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
];
const month = monthNames[date.getMonth()];

积分:Get month name from Date

答案 4 :(得分:0)

并非所有浏览器版本都支持参数localesoptions。较新版本的Edge已支持"default"值,但较旧版本不支持(尽管支持参数)。我不确定哪个版本开始支持"default"值。

根据this page,“如果未提供语言环境参数或未定义语言环境参数,则使用运行时的默认语言环境”。因此,您可以尝试date.toLocaleString(undefined, { month: 'short' });。 Edge支持此值。

该主题需要更多研究。一旦您用其他解决方案回答了问题,我就停了下来。但是,如果您还有时间,请尝试与我们分享您的结果。