gpt4 book ai didi

javascript - 为什么 `Temporal.Duration` 实例上的算术需要 `relativeTo` 引用日历日期?

转载 作者:行者123 更新时间:2023-12-02 01:26:18 25 4
gpt4 key购买 nike

提议的 JavaScript 时态日期/时间 API 不经意地提到“解释年、月或周需要引用点”( source ),但我无法理解这是什么意思。

更具体地说,以下情况是不可能的:

let oneWeek = Temporal.Duration.from({ weeks: 1 });
console.log(`one week is ${oneWeek.total('day')} days`);

这将导致以下错误:

RangeError: a starting point is required for balancing calendar units

这可以通过在 total() 调用中使用 relativeTo 参数来膨胀我的代码来解决,如下所示:

console.log(`one week is ${oneWeek.total({ unit: 'day', relativeTo: Temporal.Now.plainDateISO() })} days`);

但是有人可以详细说明为什么这是必要的吗?据我所知,一周一直是并且永远是 7 天……?

最佳答案

As far as I can tell a week has always been and will always be seven days

甚至在daylight saving time附近改变?你知道,那些你把时钟调快或调快一小时的周日吗?如果您测量从周三到下周三的持续时间,那么这个“一周”可能正好是 7 天长,或 6 天 23 小时,或 7 天 1 小时。

请参阅 Balancing Relative to a Reference Point 上的文档:

Balancing that includes days, weeks, months, and years is more complicated because those units can be different lengths.In the default ISO calendar, a year can be 365 or 366 days, and a month can be 28, 29, 30, or 31 days.In other calendars, years aren’t always 12 months long and weeks aren’t always 7 days.Finally, in time zones that use Daylight Saving Time (DST) days are not always 24 hours long.

这也指leap years .

还有discussion in issue #857 :

Specifically, the following time scale unit conversions are contextual (the “conversion boundaries”):

  • year ↔ day (365, 366 days)
  • month ↔ day (28, 29, 30, 31 days)
  • minute ↔ second (59, 60, 61 seconds)

最后一个指的是 leap seconds .

当然,时态 API 必须考虑 September, 1752 中发生的情况。 。相关:Get number of days in a specific month that are in a date range .

关键是,某个时间单位有多长这个问题的答案会根据上下文而变化。这不仅仅与时区有关;还与时区有关。不同的日历有各种各样的异常。

当然,proleptic Gregorian calendar浏览器中使用的日历可能不会受到 1752 年的影响,但这需要了解使用哪个日历。您可以使用 relativeTo 提供此信息;它包含在 Temporal.Now.plainDateISO() 中。现在很明显可以使用 ISO 周,该周始终有 7 天。但如果没有这些信息,就不可能准确判断,并且通用日期和时间 API 无法确定 ISO 周就是您真正的意思。

关于javascript - 为什么 `Temporal.Duration` 实例上的算术需要 `relativeTo` 引用日历日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74536828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com