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.
Если начальная и конечная даты эквивалентны на уровне точности вывода, то вывод имеет тот же список токенов, что и при вызове 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(). |
См. также
© 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