【问题标题】:Generating a 24 hour UTC date range for a timezone using dayjs使用 dayjs 为时区生成 24 小时 UTC 日期范围
【发布时间】:2021-04-17 16:45:19
【问题描述】:

我正在尝试创建一个函数,该函数使用dayjs 以UTC 格式返回给定日期和给定时区的开始和结束时间。这些是我认为我需要的结果示例:

Date Timezone Start End
2021-04-15 America/New_York 2021-04-15T04:00:00.000Z 2021-04-16T03:59:59.999Z
2021-03-27 America/New_York 2021-03-27T04:00:00.000Z 2021-03-28T03:59:59.999Z
2021-03-13 America/New_York 2021-03-13T05:00:00.000Z 2021-03-14T04:59:59.999Z

这是我拥有的功能:

dayjs.extend(utc);
dayjs.extend(timezone);

export const getDayRange = (date, timezone = "America/New_York") => ({
  start: dayjs.tz(date, timezone).startOf("day").utc().toISOString(),
  end: dayjs.tz(date, timezone).endOf("day").utc().toISOString()
});

但是,它没有输出我预期的结果,并且似乎受到当地时间的影响(因为与 UTC 的偏移在 3 月 28 日发生变化,这是英国而不是纽约的夏令时结束)。我已经尝试了链式dayjs 命令的各种组合,但结果各不相同。

这感觉应该是 dayjs 非常简单的东西,更不用说一个相当常见的用例了。但是,我正在努力寻找工作。

codesandbox example with tests

【问题讨论】:

    标签: javascript dayjs


    【解决方案1】:

    事实证明,自 v.1.9.6 版本以来,dayjs 中的时区存在一些问题。预计下一个版本(1.10.5?)会修复:

    https://github.com/iamkun/dayjs/issues/1437

    我能够使用 moment 代替(因为 API 大多相同)解决了我的问题:

    export const getDayRange = (date, timezone = "America/New_York") => ({
      start: moment.tz(date, timezone).startOf("day").toISOString(),
      end: moment.tz(date, timezone).endOf("day").toISOString()
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 2018-06-17
      • 2023-04-06
      • 2016-07-22
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多