【问题标题】:JavaScript timeZone is not working while using IE, but works fine in chromeJavaScript timeZone 在使用 IE 时不起作用,但在 chrome 中可以正常工作
【发布时间】:2020-08-31 23:19:21
【问题描述】:

我在下面编写了代码 sn-p 以获取指定时区和格式的时间。此代码在 chrome 中运行良好,但在使用 IE 时,它显示以下错误消息: “timeZone”的选项值“AMERICA/LOS_ANGELES”超出有效范围。预期:['UTC']

我需要使用带有“America/Los_Angeles”的时区。我很感激这里的任何帮助。

function getPSTTime() {
    var usaTime = new Date().toLocaleString("en-US", {timeZone: "America/Los_Angeles"});
    usaTime = new Date(usaTime);
    var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
    var ampm = usaTime.getHours() >= 12 ? 'PM' : 'AM';
    var date = usaTime .getDate()+'-'+ months[usaTime.getMonth()] +'-'+usaTime .getFullYear();
    var time = usaTime .getHours() + ":" + usaTime .getMinutes() + ":" + usaTime .getSeconds() + " " + ampm;
    var dateTime = date+' '+time;
    return dateTime;
}

【问题讨论】:

  • Java 不是 Javascript。

标签: javascript google-chrome internet-explorer


【解决方案1】:

IE11 在使用时区选项时对日期格式的支持有限。基本上,唯一有效的选项是 UTC。

我建议你可以参考下面的例子。

<!doctype html>
<html>
<head>
<script src="https://unpkg.com/date-time-format-timezone@latest/build/browserified/date-time-format-timezone-complete-min.js"></script>

<script>
function updateTimes() {
   var dt = new Date();
  var els = document.querySelectorAll("[data-tz]");
  for (var l = 0; l < els.length; l ++) {
    var d = els[l];
    d.innerText = dt.toLocaleString('en-US', {timeZone: d.dataset.tz});
  }
}

updateTimes();
setInterval(updateTimes, 1000);
</script>
</head>
<body>
<div>
  <span data-tz="America/Los_Angeles"></span>
  - America/Los_Angeles
</div>
</body>
</html>

在 IE 11 浏览器中的输出:

参考:

IE 11 throwing “'timeZone' is outside of valid range” when setting timezone to “Europe/London”

编辑:

下面是只使用JS代码的代码示例:

function updateTimes() {
   var dt = new Date();
   var str = dt.toLocaleString('en-US', {timeZone: "America/Los_Angeles"});
   console.log(str);
  }


updateTimes();
setInterval(updateTimes, 1000);
&lt;script src="https://unpkg.com/date-time-format-timezone@latest/build/browserified/date-time-format-timezone-complete-min.js"&gt;&lt;/script&gt;

输出:

【讨论】:

  • 感谢您的意见。我只是想知道我们可以将此代码编写为 javascript 方法而不是集成到 html 中。另外,我们能否以这种格式获取时间:15-May-2020 6:8:35 AM
  • 是的,你可以把代码写成方法。在上面的例子中,你可以看到我已经声明了这个函数。您可以尝试根据自己的要求修改代码。
  • 实际上,我想在javascript方法本身中使用data-tz="America/Los_Angeles",这样我就不需要依赖html代码了。我们可以在 JS 中使用它吗?如果这里有错误或遗漏什么,请纠正我。
  • JS代码中需要这样写。 dt.toLocaleString('en-US', {timeZone: "America/Los_Angeles"});
  • 我们不能使用 dt.toLocaleString("en-US", {timeZone: "America/Los_Angeles"}) 因为这会在 IE 中抛出错误。我的疑问是我们如何在下面的代码中为 data-tz="America/Los_Angeles" 赋值:– v​​ar els = document.querySelectorAll("[data-tz]") 而不接触 html 代码。
猜你喜欢
  • 1970-01-01
  • 2013-12-13
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多