Spec-Zone.ru › JavaScript

Intl.DateTimeFormat.prototype.formatRangeToParts()

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в версиях браузеров. Она доступна в браузерах с сентября 2017 года.

Метод formatRangeToParts() экземпляров Intl.DateTimeFormat возвращает массив объектов, представляющих каждую часть отформатированной строки, которая была бы возвращена методом formatRange(). Он полезен для создания пользовательских строк из локализованных токенов.

Попробуйте

const startDate = new Date(Date.UTC(2007, 0, 10, 10, 0, 0)); // > 'Wed, 10 Jan 2007 10:00:00 GMT'
const endDate = new Date(Date.UTC(2007, 0, 10, 11, 0, 0)); // > 'Wed, 10 Jan 2007 11:00:00 GMT'

const dateTimeFormat = new Intl.DateTimeFormat("en", {
  hour: "numeric",
  minute: "numeric",
});

const parts = dateTimeFormat.formatRangeToParts(startDate, endDate);
for (const part of parts) {
  console.log(part);
}
// Expected output (in GMT timezone):
// Object { type: "hour", value: "2", source: "startRange" }
// Object { type: "literal", value: ":", source: "startRange" }
// Object { type: "minute", value: "00", source: "startRange" }
// Object { type: "literal", value: " – ", source: "shared" }
// Object { type: "hour", value: "3", source: "endRange" }
// Object { type: "literal", value: ":", source: "endRange" }
// Object { type: "minute", value: "00", source: "endRange" }
// Object { type: "literal", value: " ", source: "shared" }
// Object { type: "dayPeriod", value: "AM", source: "shared" }

Синтаксис

formatRangeToParts(startDate, endDate)

Параметры

startDate
Начало диапазона дат. Может быть объектом Date или Temporal.PlainDateTime. Дополнительно может быть объектом Temporal.PlainTime, Temporal.PlainDate, Temporal.PlainYearMonth или Temporal.PlainMonthDay, если объект DateTimeFormat был сконфигурирован для вывода по крайней мере одной соответствующей части даты.

Примечание: Объект Temporal.ZonedDateTime всегда вызовет TypeError; вместо этого используйте Temporal.ZonedDateTime.prototype.toLocaleString() или преобразуйте его в объект Temporal.PlainDateTime.

endDate
Конец диапазона дат. Должен иметь тот же тип, что и startDate.

Возвращаемое значение

Массив Array объектов, содержащих отформатированный диапазон дат в виде частей. Каждый объект имеет три свойства: type, value и source, каждое из которых содержит строку. Конкатенация строк value в указанном порядке приведет к той же строке, что и вызов formatRange(). type могут иметь те же значения, что и formatToParts(). source может быть одним из следующих:

startRange
Токен является частью начальной даты.
endRange
Токен является частью конечной даты.
shared
Токен совместно используется началом и концом; например, если начало и конец диапазона имеют один и тот же период дня, этот токен может быть повторно использован. Все литералы, которые являются частью самого шаблона диапазона, такие как разделитель " – ", также помечаются как shared.

Если начальная и конечная даты эквивалентны на уровне точности вывода, то вывод имеет тот же список токенов, что и при вызове formatToParts() для начальной даты, причем все токены помечены как source: "shared".

Примеры

Использование formatRangeToParts()

Метод formatRange() выводит локализованные, непрозрачные строки, которые нельзя напрямую изменять:

const date1 = new Date(Date.UTC(1906, 0, 10, 10, 0, 0)); // Wed, 10 Jan 1906 10:00:00 GMT
const date2 = new Date(Date.UTC(1906, 0, 10, 11, 0, 0)); // Wed, 10 Jan 1906 11:00:00 GMT

const fmt = new Intl.DateTimeFormat("en", {
  hour: "numeric",
  minute: "numeric",
});

console.log(fmt.formatRange(date1, date2)); // '10:00 – 11:00 AM'

Однако во многих пользовательских интерфейсах вы можете захотеть настроить форматирование этой строки или вставить ее в другой текст. Метод formatRangeToParts() выдает ту же информацию в виде частей:

console.log(fmt.formatRangeToParts(date1, date2));

// return value:
[
  { type: "hour", value: "10", source: "startRange" },
  { type: "literal", value: ":", source: "startRange" },
  { type: "minute", value: "00", source: "startRange" },
  { type: "literal", value: " – ", source: "shared" },
  { type: "hour", value: "11", source: "endRange" },
  { type: "literal", value: ":", source: "endRange" },
  { type: "minute", value: "00", source: "endRange" },
  { type: "literal", value: " ", source: "shared" },
  { type: "dayPeriod", value: "AM", source: "shared" },
];

Спецификации

Спецификация
ECMAScript® 2027 Internationalization API Specification
# sec-Intl.DateTimeFormat.prototype.formatRangeToParts

Совместимость с браузерами

Настольные ПК Мобильные Сервер
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
formatRangeToParts
76
79
91
63
14.1
76
91
54
14.5
12.0
76
14.5
1.0.0
1.8
12.9.0До версии 13.0.0 по умолчанию доступны только данные локали для en-US. Подробнее см. конструктор DateTimeFormat().

См. также

  • Intl.DateTimeFormat
  • Intl.DateTimeFormat.prototype.formatRange()

© 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/Intl/DateTimeFormat/formatRangeToParts

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API