Temporal.ZonedDateTime.prototype.add()
Базовая Ограниченная доступность
Эта функция не является базовой, поскольку она не работает в некоторых из наиболее широко используемых браузеров.
Метод add() экземпляров Temporal.ZonedDateTime возвращает новый объект Temporal.ZonedDateTime, представляющий эту дату и время, сдвинутые вперед на заданную длительность (в форме, конвертируемой с помощью Temporal.Duration.from()).
Синтаксис
add(duration) add(duration, options)
Параметры
-
duration - Строка, объект или экземпляр
Temporal.Duration, представляющий длительность, которую нужно добавить к этой дате и времени. Он преобразуется в объектTemporal.Durationс использованием того же алгоритма, что иTemporal.Duration.from(). -
optionsНеобязательно - Объект, содержащий следующее свойство:
-
overflowНеобязательно - Строка, определяющая поведение, когда компонент даты выходит за пределы диапазона. Возможные значения:
-
"constrain"(по умолчанию) - Компонент даты приводится к допустимому диапазону.
-
"reject" - Генерируется
RangeError, если компонент даты выходит за пределы диапазона.
-
-
Возвращаемое значение
Новый объект Temporal.ZonedDateTime, представляющий дату и время, указанные исходным ZonedDateTime, плюс длительность.
Исключения
-
RangeError - Генерируется, если результат не входит в представимый диапазон, который составляет ±108 дней, или около ±273 972,6 лет от эпохи Unix.
Описание
О том, как добавляются календарные длительности, см. Temporal.PlainDate.prototype.add().
Сложение и вычитание выполняются в соответствии с правилами, определенными в RFC 5545 (iCalendar):
- Добавление/вычитание части даты длительности с использованием календарной арифметики; другими словами, добавьте часть даты к ее
PlainDateTimeс помощьюTemporal.PlainDateTime.prototype.add(), а затем интерпретируйте результат в том же часовом поясе. Результат будет автоматически скорректирован с учетом летнего времени с использованием правил поляtimeZoneэтого экземпляра. Например,2024-11-03T01:00:00-04:00[America/New_York]плюс один день — это2024-11-04T01:00:00-05:00[America/New_York], как если бы день длился 25 часов.- Если дата и время неоднозначны или недействительны из-за перехода смещения часового пояса, они разрешаются с использованием поведения
disambiguation: "compatible": более поздний из двух возможных моментов времени будет использоваться для пропущенных переходов времени, а более ранний из двух возможных моментов времени будет использоваться для повторяющихся переходов времени. Например,2024-03-09T02:05:00-05:00[America/New_York]плюс один день предположительно равен2024-03-10T02:05:00-05:00[America/New_York], но этого времени не существует, поэтому возвращается время по настенным часам на один час позже,2024-03-10T03:05:00-04:00[America/New_York]. Аналогично, как2024-11-02T01:00:00-04:00[America/New_York]плюс один день, так и2024-11-04T01:00:00-05:00[America/New_York]минус один день дают2024-11-03T01:00:00-04:00[America/New_York], более ранний из двух возможных моментов времени. - Если компоненты полученной даты и времени выходят за границы, они разрешаются с использованием опции
overflow. Например,2024-08-31плюс один месяц — это2024-09-31, которого не существует, поэтому по умолчанию он приводится к2024-09-30.
- Если дата и время неоднозначны или недействительны из-за перехода смещения часового пояса, они разрешаются с использованием поведения
- Добавление/вычитание временной части длительности с использованием реального времени; другими словами, добавьте временную часть к ее
Instantс помощьюTemporal.Instant.prototype.add(), а затем интерпретируйте результат в том же часовом поясе. Например,2024-11-03T01:00:00-04:00[America/New_York]плюс один час — это2024-11-03T01:00:00-05:00[America/New_York].
Эти правила делают арифметику с Temporal.ZonedDateTime "безопасной для летнего времени" (DST-safe), что означает, что результаты наиболее точно соответствуют ожиданиям как реальных пользователей, так и разработчиков других календарных приложений, совместимых со стандартами. Эти ожидания включают:
- Добавление или вычитание дней должно обеспечивать согласованность времени по часам при переходах на летнее время. Например, если у вас назначена встреча в субботу в 13:00, и вы просите перенести ее на 1 день позже, вы ожидаете, что перенесенная встреча по-прежнему будет в 13:00, даже если ночью произошел переход на летнее время.
- Добавление или вычитание временной части длительности должно игнорировать переходы на летнее время. Например, друг, с которым вы договорились встретиться через 2 часа, будет раздражен, если вы появитесь через 1 час или через 3 часа. Должен быть последовательный и относительно не вызывающий удивления порядок операций.
- Если результаты находятся в момент перехода на летнее время или около него, неоднозначности должны обрабатываться автоматически (без сбоев) и детерминированно.
Добавление длительности эквивалентно вычитанию ее отрицания.
Примеры
Добавление длительности
const start = Temporal.ZonedDateTime.from(
"2021-11-01T12:34:56-04:00[America/New_York]",
);
const end = start.add({
years: 1,
months: 2,
weeks: 3,
days: 4,
hours: 5,
minutes: 6,
seconds: 7,
milliseconds: 8,
});
console.log(end.toString()); // 2023-01-26T17:41:03.008-05:00[America/New_York]
Дополнительные примеры, особенно о том, как различные календари и опция overflow взаимодействуют с календарными длительностями, см. Temporal.PlainDate.prototype.add().
Спецификации
| Спецификация |
|---|
| Temporal # sec-temporal.zoneddatetime.prototype.add |
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
add |
144 |
144 |
139 |
128 |
предварительная версия |
144 |
139 |
95 |
Нет |
Нет |
144 |
Нет |
1.4.0 |
2.7 |
26.0.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/add