Temporal.ZonedDateTime.prototype.with()
Базовый уровень Ограниченная доступность
Эта функция не является базовой, поскольку она не работает в некоторых наиболее широко используемых браузерах.
Метод with() экземпляров Temporal.ZonedDateTime возвращает новый объект Temporal.ZonedDateTime, представляющий эту дату и время с некоторыми полями, замененными новыми значениями. Поскольку все объекты Temporal разработаны как неизменяемые, этот метод по сути функционирует как сеттер для полей даты и времени.
Чтобы заменить свойство calendarId, используйте метод withCalendar(). Чтобы заменить свойство timeZoneId, используйте метод withTimeZone().
Синтаксис
with(info) with(info, options)
Параметры
-
info - Объект, содержащий по крайней мере одно из свойств, распознаваемых
Temporal.ZonedDateTime.from()(кромеcalendarиtimeZone):day,eraиeraYear,hour,microsecond,millisecond,minute,month,monthCode,nanosecond,offset,second,year. Неуказанные свойства используют значения из исходной даты и времени. Вам нужно предоставить только одно изmonthилиmonthCode, и одно изeraиeraYearилиyear, а другое будет обновлено соответствующим образом. -
optionsНеобязательный - Объект, содержащий некоторые или все из следующих свойств (в порядке их извлечения и проверки):
-
disambiguationНеобязательный - Что делать, если локальная дата и время неоднозначны в заданной временной зоне (существует более одного момента времени с таким локальным временем, или локальное время не существует). Возможные значения:
"compatible","earlier","later"и"reject". По умолчанию используется"compatible". Для получения дополнительной информации об этих значениях см. неоднозначность и пробелы при преобразовании из локального времени в время UTC. -
offsetНеобязательный - Что делать, если смещение явно указано в
info, но оно недействительно для заданной временной зоны в заданном локальном времени. Возможные значения:"use","ignore","reject"и"prefer". По умолчанию используется"prefer". Для получения дополнительной информации об этих значениях см. неоднозначность смещения. -
overflowНеобязательный - Строка, указывающая поведение, когда компонент даты выходит за пределы диапазона (при использовании объекта
info). Возможные значения:-
"constrain"(по умолчанию) - Компонент даты ограничивается допустимым диапазоном.
-
"reject" - Генерируется
RangeError, если компонент даты выходит за пределы диапазона.
-
-
Возвращаемое значение
Новый объект Temporal.ZonedDateTime, в котором поля, указанные в info и не являющиеся undefined, заменяются соответствующими значениями, а остальные поля копируются из исходной даты и времени.
Исключения
-
TypeError - Генерируется в одном из следующих случаев:
-
infoне является объектом. -
optionsне является объектом илиundefined.
-
-
RangeError - Генерируется в одном из следующих случаев:
- Предоставленные свойства, задающие один и тот же компонент, противоречивы.
- Предоставленные нечисловые свойства недействительны; например, если
monthCodeникогда не является действительным кодом месяца в этом календаре. - Предоставленные числовые свойства выходят за пределы диапазона, а
options.overflowустановлено в значение"reject". - Время по настенным часам, представленное предоставленными свойствами, неоднозначно во временной зоне, а
options.disambiguationустановлено в значение"reject". - Результат не находится в представимом диапазоне, который составляет ±108 дней, или около ±273 972,6 лет, от эпохи Unix.
Примеры
Использование with()
const zdt = Temporal.ZonedDateTime.from(
"2021-07-01T12:34:56[America/New_York]",
);
const newZDT = zdt.with({ hour: 13 });
console.log(newZDT.toString()); // "2021-07-01T13:34:56-04:00[America/New_York]"
Для получения дополнительных примеров см. документацию по отдельным свойствам, которые могут быть установлены с помощью with().
Смещение при изменении даты
По умолчанию опция offset установлена в "prefer", что означает, что мы используем исходное смещение (или смещение, предоставленное в info), если оно допустимо, и пересчитываем в противном случае. Это означает, что если вы устанавливаете другую дату, которая имеет другое смещение из-за перехода на летнее время, смещение будет пересчитано:
const zdt = Temporal.ZonedDateTime.from(
"2021-07-01T12:00:00-04:00[America/New_York]",
);
const newZDT = zdt.with({ month: 12 });
// The offset is recalculated to -05:00
console.log(newZDT.toString()); // "2021-12-01T12:00:00-05:00[America/New_York]"
И если вы устанавливаете время в пределах перехода на летнее время, смещение используется для разрешения неоднозначности:
const zdt = Temporal.ZonedDateTime.from(
"2024-11-02T01:05:00-04:00[America/New_York]",
);
const newZDT = zdt.with({ day: 3 });
console.log(newZDT.toString()); // "2024-11-03T01:05:00-04:00[America/New_York]"
const zdt2 = Temporal.ZonedDateTime.from(
"2024-11-04T01:05:00-05:00[America/New_York]",
);
const newZDT2 = zdt2.with({ day: 3 });
console.log(newZDT2.toString()); // "2024-11-03T01:05:00-05:00[America/New_York]"
Если вы используете offset: "use", то смещение будет использовано как есть для получения точного времени сначала, и затем смещение будет пересчитано:
const zdt = Temporal.ZonedDateTime.from(
"2021-07-01T12:00:00-04:00[America/New_York]",
);
const newZDT = zdt.with({ month: 12 }, { offset: "use" });
// The offset is recalculated to -05:00, but the wall-clock time changes
console.log(newZDT.toString()); // "2021-12-01T11:00:00-05:00[America/New_York]"
Вы также можете установить offset: "reject", чтобы вызвать ошибку, если исходное смещение недействительно, что требует явного указания нового смещения:
const zdt = Temporal.ZonedDateTime.from(
"2021-07-01T12:00:00-04:00[America/New_York]",
);
zdt.with({ month: 12 }, { offset: "reject" });
// RangeError: date-time can't be represented in the given time zone
zdt.with({ month: 12, offset: "-05:00" }, { offset: "reject" }).toString();
// "2021-12-01T12:00:00-05:00[America/New_York]"
Спецификации
| Спецификация |
|---|
| Temporal # sec-temporal.zoneddatetime.prototype.with |
Совместимость с браузерами
| Десктоп | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | |
with |
144 |
144 |
139 |
128 |
preview |
144 |
139 |
95 |
Нет |
Нет |
144 |
Нет |
1.4.0 |
2.7 |
26.0.0 |
См. также
Temporal.ZonedDateTimeTemporal.ZonedDateTime.prototype.withCalendar()Temporal.ZonedDateTime.prototype.withTimeZone()Temporal.ZonedDateTime.prototype.withPlainTime()Temporal.ZonedDateTime.from()Temporal.ZonedDateTime.prototype.add()Temporal.ZonedDateTime.prototype.subtract()
© 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/with