【问题标题】:How to convert date string with specific locale to ISO format如何将具有特定语言环境的日期字符串转换为 ISO 格式
【发布时间】:2021-03-02 21:22:44
【问题描述】:

我想将具有特定语言环境(以 IANA 格式定义的语言环境)的日期时间字符串转换为 Date 对象并以 ISO 8601 格式打印 UTC 时间。下面这段代码完美运行。

<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', ()=>{
   console.log(moment('2021-01-01T00:00:00').tz('America/New_York').toISOString());
});
</script>

结果是我的控制台日志显示2021-01-01T05:00:00.000Z

但是,我想在不使用任何 3rd 方库的情况下获得相同的结果。我只想使用浏览器的 Javascript 默认对象/类/api 等...所以我尝试了所有这些但它们都给出了错误:

   new Date("2021-01-01T00:00:00 America/New_York").toISOString();
   (new Date("2021-01-01T00:00:00")).setLocale('America/New_York').toISOString();
   (new Date("January 1, 2021 12:00:00 AM America/New_York").toISOString();

在不使用诸如 moment、luxon 等 javascript 库的情况下,在 javascript 中将具有区域设置的日期字符串转换为 ISO 8601 格式的正确方法是什么?

我需要它在 2021 年 1 月 1 日之后发布的任何桌面版 Chrome、FireFox、Edge 和 Safari 中工作(旧版本不需要支持)。

【问题讨论】:

    标签: javascript datetime


    【解决方案1】:

    this StackOverflow answer 的帮助下,可以按如下方式完成。你快到了。 toLocaleString() 是您想要的方法。顾名思义,它返回一个字符串,因此需要将其转换回日期对象。我认为这样做的笨重是很多人喜欢使用类似时刻的库的原因。

    new Date(
      new Date("2021-01-01T00:00:00")
        .toLocaleString("en-US", {timeZone: "America/New_York"})
    ).toISOString();
    

    【讨论】:

      【解决方案2】:

      您可以使用名为 Intl 的 vanilla javascript 类。

       const newDate = new Date();
      console.log(new Intl.DateTimeFormat('en-us', { dateStyle: 'short', timeStyle: 'medium' }).format(newDate))
      

      ;

      【讨论】:

      • 这不会导致操作要求的 2021-01-01T05:00:00.000Z 格式。
      猜你喜欢
      • 2021-01-27
      • 1970-01-01
      • 2022-12-25
      • 2015-04-27
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多