以下代码段是从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
格式获得月份?
答案 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()];
答案 4 :(得分:0)
并非所有浏览器版本都支持参数locales
和options
。较新版本的Edge已支持"default"
值,但较旧版本不支持(尽管支持参数)。我不确定哪个版本开始支持"default"
值。
根据this page,“如果未提供语言环境参数或未定义语言环境参数,则使用运行时的默认语言环境”。因此,您可以尝试date.toLocaleString(undefined, { month: 'short' });
。 Edge支持此值。
该主题需要更多研究。一旦您用其他解决方案回答了问题,我就停了下来。但是,如果您还有时间,请尝试与我们分享您的结果。