Pas*_*per 12 javascript internet-explorer
我试图用时区和语言环境转换日期和时间,但它在IE11中不起作用.它适用于chrome,firefox和edge.
最简单完整的可验证示例:
function getLocalTime(date){
var timeZone = "Asia/Kolkata";
var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
var dateAndTime = utcDate.toLocaleDateString("en",{timeZone:timeZone})+" "+ utcDate.toLocaleTimeString("en",{timeZone:timeZone}).replace(/:\d+ /, ' ');;
return dateAndTime;
}
console.log(getLocalTime(Date());
Run Code Online (Sandbox Code Playgroud)
IE11中的错误:
SCRIPT5118: Option value 'ASIA/KOLKATA' for 'timeZone' is outside of valid range. Expected: ['UTC']
注意:我不想使用任何第三方js.
MDN上的timeZone文档表示支持时区字符串是可选的,"UTC"除外:
唯一值实现必须识别为"UTC"; 默认值是运行时的默认时区.实现还可以识别IANA时区数据库的时区名称,例如"Asia/Shanghai","Asia/Kolkata","America/New_York".
ECMAScript规范的相关部分证实了这一点(给@mkaatman提示):
[[timeZone]]是字符串值"UTC"或未定义.
允许一致的实现接受其他值,然后在DateTimeFormat构造函数中为[...]选项属性timeZone提供实现定义的行为,而不是抛出RangeError,前提是其他可接受的输入值不区分大小写IANA时区数据库中的区域或链接标识符的匹配,并且在数据库中用于DateTimeFormat.resolvedOptions返回的对象的timeZone属性的区域中的区域标识符被规范化,除了"Etc/GMT"应规范化为"世界标准时间".
Microsoft的文档声明他们开始在IE11中支持localeDateString:
从Internet Explorer 11开始,toLocaleDateString在内部使用Intl.DateTimeFormat格式化日期,这增加了对locales和options参数的支持.
...但根据您的错误消息,他们支持最小的"'UTC'或未定义"版本.时区数据库在这里是值得的,但看起来你需要找到一种不同的方法来处理它(可能涉及getTimezoneOffset()而不是命名的时区.)
| 归档时间: |
|
| 查看次数: |
5266 次 |
| 最近记录: |