Javascript date.toLocaleDateString(区域设置,{timeZone:';Asia/Kolkata';})不在ie 11中工作

Javascript date.toLocaleDateString(区域设置,{timeZone:';Asia/Kolkata';})不在ie 11中工作,javascript,internet-explorer,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.getMin

我试图用时区和语言环境转换日期和时间,但它在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:“时区”的选项值“亚洲/加尔各答”超出有效范围。预期:['UTC']

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

表示支持时区字符串是可选的,除了“UTC”:

实施必须识别的唯一值是“UTC”;默认值是运行时的默认时区。实施还可以识别IANA时区数据库的时区名称,如“亚洲/上海”、“亚洲/加尔各答”、“美国/纽约”

报告的相关部分确认了这一点(给@mkaatman的帽子提示):

[[timeZone]]是字符串值“UTC”或未定义

对于DateTimeFormat构造函数中的选项属性timeZone,允许一致性实现接受附加值,然后具有实现定义的行为,而不是抛出RangeError,前提是附加的可接受输入值是IANA时区数据库中区域或链接标识符的不区分大小写匹配,并被规范化为数据库中用于DateTimeFormat.resolvedOptions返回的对象时区属性的大小写中的区域标识符,但“Etc/GMT”除外应规范化为“UTC”

他们开始在IE11中支持LocaleDataString的州:

从Internet Explorer 11开始,toLocaleDateString在内部使用Intl.DateTimeFormat格式化日期,这增加了对区域设置和选项参数的支持


…但根据您的错误消息,他们支持最小的“UTC”或“未定义”版本。时区数据库是值得的,但看起来您需要找到一种不同的方法来处理它(可能涉及
getTimezoneOffset()
,而不是命名时区)。

它只是那个时区还是任何时区?当你说“不工作”时,它在做什么?如果您点击F12,控制台中会显示什么。由于“时区”的“Option val ue”ASIA/KOLKATA”超出有效范围,因此会抛出错误。预期:['UTC']”但我想要像亚洲/加尔各答这样的时区的日期和时间(由用户设置)timezonestr的值是多少?timezonestr是亚洲/加尔各答。状态“[[timeZone]]是字符串值“UTC”或未定义。“如何获取getTimezoneOffset()的DST信息?getTimezoneOffset()会自动调整夏令时,因此无论DST当时是否对该区域有效,您都会获得正确的偏移量。”。(如果您需要特别检测DST是否有效,那么这就更难了——通过比较12月和6月的偏移量,.js library就解决了这个问题……)我需要知道在Nov30(例如)召开的会议上显示的正确的本地时间,并且我需要一个unix时间戳。getTimezoneOffset()似乎只与今天相关,不是吗?它与“今天”无关,它与调用它的日期相关。将该unix时间戳转换为日期,然后在该日期调用getTimezoneOffset()<代码>新日期(2018,1)。getTimezoneOffset()将为您提供与新日期(2018,6)不同的结果。getTimezoneOffset()