Intl.DateTimeFormat.prototype.formatToParts()

Метод Intl.DateTimeFormat.prototype.formatToParts() позволяет выполнять форматирование строк с учётом форматирования DateTimeFormat.

Синтаксис

Intl.DateTimeFormat.prototype.formatToParts(date)

Параметры

date Необязательный
Дата, которую нужно отформатировать.

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

Массив объектов Array, содержащий отформатированную дату по частям.

Описание

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

[
  { type: 'day', value: '17' },
  { type: 'weekday', value: 'Monday' }
]

Возможные типы:

day
Строка, используемая для дня, например, "17".
dayPeriod
Строка, используемая для времени суток, например, "AM" или "PM".
era
Строка, используемая для эры, например, "BC" или "AD".
hour
Строка, используемая для часа, например, "3" или "03".
literal
Строка, используемая для разделения значений даты и времени, например, "/", ",", "o'clock", "de" и другие.
minute
Строка, используемая для минут, например, "00".
month
Строка, используемая для месяца, например, "12".
second
Строка, используемая для секунд, например, "07" или "42".
timeZoneName
Строка, используемая для названия временной зоны, например, "UTC".
weekday
Строка, используемая для дня недели, например, "M", "Monday" или "Montag".
year
Строка, используемая для года, например, "2012" или "96".

Примеры

DateTimeFormat выводит локализированные строки, которые нельзя изменять напрямую:

var date = Date.UTC(2012, 11, 17, 3, 0, 42);

var formatter = new Intl.DateTimeFormat('ru', {
  weekday: 'long',
  year: 'numeric',
  month: 'numeric',
  day: 'numeric',
  hour: 'numeric',
  minute: 'numeric',
  second: 'numeric',
  hour12: true,
  timeZone: 'UTC'
});

formatter.format(date);
// "понедельник, 17.12.2012 г., 3:00:42 AM"

Однако, во многих пользовательских интерфейсах есть желание настроить форматирование этой строки. Метод formatToParts включает форматирование строки с учётом местности, созданной форматером DateTimeFormat, предоставляя вам строку по частям:

formatter.formatToParts(date);

// возвращаемое значение: 
[ 
  { type: 'weekday',   value: 'понедельник'},
  { type: 'literal',   value: ', '         }, 
  { type: 'day',       value: '17'         },
  { type: 'literal',   value: '.'          }, 
  { type: 'month',     value: '12'         }, 
  { type: 'literal',   value: '.'          }, 
  { type: 'year',      value: '2012'       }, 
  { type: 'literal',   value: 'г., '       }, 
  { type: 'hour',      value: '3'          }, 
  { type: 'literal',   value: ':'          }, 
  { type: 'minute',    value: '00'         }, 
  { type: 'literal',   value: ':'          }, 
  { type: 'second',    value: '42'         }, 
  { type: 'literal',   value: ' '          }, 
  { type: 'dayPeriod', value: 'AM'         } 
]

Теперь информация доступна по отдельности и может быть отформатирована и объединена снова в пользавотельском порядке. Например, используя Array.prototype.map(), стрелочные функции, инструкцию switch, шаблонные строки и Array.prototype.reduce().

var dateString = formatter.formatToParts(date).map(({type, value}) => { 
  switch (type) {
    case 'dayPeriod': return `<b>${value}</b>`; 
    default : return value; 
  } 
}).reduce((string, part) => string + part);

Здесь время суток будет выделено жирным с использованием метода formatToParts().

console.log(formatter.format(date));
// "понедельник, 17.12.2012 г., 3:00:42 AM"

console.log(dateString);
// "понедельник, 17.12.2012 г., 3:00:42 <b>AM</b>"

Полифилл

Полифил для данного метода доступен здесь.

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

Спецфикация Статус Комментарий
ECMAScript Internationalization API (ECMA-402)
Определение 'Intl.DateTimeFormat.prototype.formatToParts' в этой спецификации.
Живой стандарт Изначальное определение

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

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
formatToPartsChrome Полная поддержка 57
Замечания
Полная поддержка 57
Замечания
Замечания Before version 71, formatToParts() returned an object with an incorrectly cased type key of dayperiod. Version 71 and later use the specification defined dayPeriod. See Chromium bug 865351.
Edge Полная поддержка 18Firefox Полная поддержка 51IE Нет поддержки НетOpera Полная поддержка 44
Замечания
Полная поддержка 44
Замечания
Замечания Before version 58, formatToParts() returned an object with an incorrectly cased type key of dayperiod. Version 58 and later use the specification defined dayPeriod. See Chromium bug 865351.
Safari Полная поддержка 11WebView Android Полная поддержка 57
Замечания
Полная поддержка 57
Замечания
Замечания Before version 71, formatToParts() returned an object with an incorrectly cased type key of dayperiod. Version 71 and later use the specification defined dayPeriod. See Chromium bug 865351.
Chrome Android Полная поддержка 57
Замечания
Полная поддержка 57
Замечания
Замечания Before version 71, formatToParts() returned an object with an incorrectly cased type key of dayperiod. Version 71 and later use the specification defined dayPeriod. See Chromium bug 865351.
Firefox Android Полная поддержка 56Opera Android Полная поддержка 43
Замечания
Полная поддержка 43
Замечания
Замечания Before version 50, formatToParts() returned an object with an incorrectly cased type key of dayperiod. Version 50 and later use the specification defined dayPeriod. See Chromium bug 865351.
Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0
Замечания
Полная поддержка 7.0
Замечания
Замечания Before version 71, formatToParts() returned an object with an incorrectly cased type key of dayperiod. Version 71 and later use the specification defined dayPeriod. See Chromium bug 865351.
nodejs Полная поддержка 8.0.0
Замечания
Полная поддержка 8.0.0
Замечания
Замечания Before version 12.0.0, formatToParts() returned an object with an incorrectly cased type key of dayperiod. Version 12.0.0 and later use the specification defined dayPeriod. See Chromium bug 865351.
Замечания Before version 13.0.0, only the locale data for en-US is available by default. See the DateTimeFormat() constructor for more details.

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Смотрите замечания реализации.
Смотрите замечания реализации.

Смотрите также