代码之家  ›  专栏  ›  技术社区  ›  Misha Moroshko Amr Mostafa

如何从日期字符串中获取日期名称,而不考虑用户的时区?

  •  0
  • Misha Moroshko Amr Mostafa  · 技术社区  · 5 年前

    给定一个日期(没有时间),例如。 2021-08-11 ,无论用户的时区如何,我如何获取其日期名称(例如周三)?

    请注意,尝试使用:

    new Date("2021-08-11").toLocaleString('en-AU', { weekday:'long' })
    

    或 date-fns s format :

    format(new Date("2021-08-11"), "EEEE")
    

    例如,如果用户的时区是GMT-7,则会导致错误的日期(星期二)。

    1 回复  |  直到 5 年前
        1
  •  1
  •   zecuria    5 年前

    您可以使用 date-fns-tz 正如另一条评论所建议的那样。它内部使用 Intl 。如果你只关心得到你可以使用的一天 Intl 直接地

    let formatter = new Intl.DateTimeFormat('en-US', {
      timeZone: 'UTC',
      weekday: 'long',
    });
    
    formatter.format(new Date("2021-08-11")) // outputs: "Wednesday"
    

    我建议您也将日期设置为ISO格式,即。 "2021-08-11T00:00:00.000Z" 作为 Z 最后将确保在格式化之前以UTC对日期进行解析。

        2
  •  1
  •   waterloos    5 年前

    我还没有调查最新情况 data-fns 。但几年前我使用它时,它没有时区支持。自 Date 类不在内部保存时区信息,当时间获取的位置与使用的位置不同时,会导致一些问题。看看这个 stackoverflow post 详细信息。

    有一些库可以解决这个问题。由于您正在使用 date-fns 你可能想试试 date-fns-tz .

    推荐文章