使用 dayjs 为时区生成 24 小时 UTC 日期范围
Generating a 24 hour UTC date range for a timezone using dayjs
我正在尝试创建一个函数,它 returns 使用 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 日发生变化,这是英国而非纽约的 DST 结束)。我尝试了不同结果的链式 dayjs
命令的各种组合,none 正确。
这感觉应该是 dayjs
非常简单的东西,更不用说一个相当常见的用例了。但是,我正在努力让一些东西发挥作用。
事实证明,自版本 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()
});
我正在尝试创建一个函数,它 returns 使用 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 日发生变化,这是英国而非纽约的 DST 结束)。我尝试了不同结果的链式 dayjs
命令的各种组合,none 正确。
这感觉应该是 dayjs
非常简单的东西,更不用说一个相当常见的用例了。但是,我正在努力让一些东西发挥作用。
事实证明,自版本 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()
});