date.toLocaleDateString(locale,{timeZone:'Asia / Kolkata'})不工作在11

时间:2017-06-07 02:32:57

标签: 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());

IE11中的错误:

SCRIPT5118: Option value 'ASIA/KOLKATA' for 'timeZone' is outside of valid range. Expected: ['UTC']

注意:我不想使用任何第三方js。

1 个答案:

答案 0 :(得分:5)

timeZone documentation on MDN表示支持时区字符串是可选的,除了" UTC":

  

实现必须识别的唯一值是" UTC&#34 ;;默认值是运行时的默认时区。实现还可以识别IANA时区数据库的时区名称,例如"亚洲/上海","亚洲/加尔各答"," America / New_York"。

ECMAScript spec的相关部分证实了这一点(给@mkaatman提示):

  

[[timeZone]]是字符串值" UTC"或未定义。

     

允许一致的实现接受其他值,然后在DateTimeFormat构造函数中为[...]选项属性timeZone提供实现定义的行为而不是抛出RangeError,前提是其他可接受的输入值是IANA时区数据库中区域或链接标识符的不区分大小写的匹配,并且在数据库中用于DateTimeFormat.resolvedOptions返回的对象的timeZone属性的区域中的区域标识符被规范化,除了" Etc / GMT& #34;应规范化为" UTC"。

Microsoft's documentation表示他们开始在IE11中支持localeDateString:

  

从Internet Explorer 11开始,toLocaleDateString在内部使用Intl.DateTimeFormat格式化日期,这增加了对语言环境和选项参数的支持。

...但根据您的错误消息,他们的支持是针对最小的"' UTC'或未定义"版。时区数据库的价值为here,但看起来你需要找到一种不同的方法来处理这个问题(可能涉及getTimezoneOffset()而不是命名的时区。)