Этот пакет отклонился от спецификации Intl.RelativeTimeFormat довольно сильно. Поэтому мы установили этот пакет и добавили `@formatjs/intl-relativetimeformat в качестве специфического полифилла.
units (такие как day-short ) должны перемещаться аналогично: new IntlRelativeFormat ( 'en' , { units : 'second-short' } ) . format (
Date . now ( ) - 1000
) ;
// will be
new Intl . RelativeTimeFormat ( 'en' , { style : 'short' } ) . format ( - 1 , 'second' ) ;
new IntlRelativeFormat ( 'en' , { units : 'day-narrow' } ) . format (
Date . now ( ) - 48 * 3600 * 1000
) ;
// will be
new Intl . RelativeTimeFormat ( 'en' , { style : 'narrow' } ) . format ( - 2 , 'day' ) ;style: numeric станет numeric: always на спецификацию (что также является дефолтом) new IntlRelativeFormat ( 'en' , {
units : 'second-short' ,
style : 'numeric'
} ) . format ( Date . now ( ) - 1000 ) ;
// will be
new Intl . RelativeTimeFormat ( 'en' , { style : 'short' } ) . format ( - 1 , 'second' ) ; new IntlRelativeFormat ( 'en' , { units : 'day-narrow' , style : 'numeric' } ) . format (
Date . now ( ) - 48 * 3600 * 1000
) ;
// will be
new Intl . RelativeTimeFormat ( 'en' , { style : 'narrow' } ) . format ( - 2 , 'day' ) ;style: 'best fit' немного сложнее, но мы выпустили @formatjs/intl-utils чтобы облегчить переход: new IntlRelativeFormat ( 'en' , { style : 'best fit' } ) . format ( Date . now ( ) - 1000 ) ;
// will be
import { selectUnit } from '@formatjs/intl-utils' ;
const diff = selectUnit ( Date . now ( ) - 1000 ) ;
new Intl . RelativeTimeFormat ( 'en' , { numeric : 'auto' } ) . format (
diff . value ,
diff . unit
) ; new IntlRelativeFormat ( 'en' , { style : 'best fit' } ) . format (
Date . now ( ) - 48 * 3600 * 1000
) ;
// will be
import { selectUnit } from '@formatjs/intl-utils' ;
const diff = selectUnit ( Date . now ( ) - 48 * 3600 * 1000 ) ;
new Intl . RelativeTimeFormat ( 'en' , { numeric : 'auto' } ) . format (
diff . value ,
diff . unit
) ;formatjs/intl-utils вы использовали options.now format new IntlRelativeFormat ( 'en' , { style : 'best fit' } ) . format ( Date . now ( ) - 1000 , {
now : Date . now ( ) + 1000
} ) ;
// will be
import { selectUnit } from '@formatjs/intl-utils' ;
const diff = selectUnit ( Date . now ( ) - 1000 , Date . now ( ) + 1000 ) ;
new Intl . RelativeTimeFormat ( 'en' , { numeric : 'auto' } ) . format (
diff . value ,
diff . unit
) ; new IntlRelativeFormat ( 'en' , { style : 'best fit' } ) . format (
Date . now ( ) - 48 * 3600 * 1000 ,
{ now : Date . now ( ) + 1000 }
) ;
// will be
import { selectUnit } from '@formatjs/intl-utils' ;
const diff = selectUnit ( Date . now ( ) - 48 * 3600 * 1000 , Date . now ( ) + 1000 ) ;
new Intl . RelativeTimeFormat ( 'en' , { numeric : 'auto' } ) . format (
diff . value ,
diff . unit
) ;Форматы JavaScript датируются относительным временным строками (например, «3 часа назад»).
Этот пакет направлен на то, чтобы предоставить способ форматировать различные вариации относительного времени. Вы можете использовать этот пакет в браузере и на сервере через node.js.
Эта реализация очень похожа на Moment.js, в концепции, хотя она предоставляет только функции форматирования, основанные на данных Locale Unicode CLDR, отраслевом стандарте, который поддерживает более 200 языков.
var rf = new IntlRelativeFormat ( locales , [ options ] ) ; locales могут быть либо единственной языковой меткой, например, "en-US" , либо массивом из них, из которого будет использоваться первый матч. options предоставляют способ управлять выводом форматированной относительной строки времени.
var output = rf . format ( someDate , [ options ] ) ; Наиболее распространенный способ использования этой библиотеки - это построить экземпляр IntlRelativeFormat и повторное использование его много раз для форматирования различных значений дат; например:
var rf = new IntlRelativeFormat ( 'en-US' ) ;
var posts = [
{
id : 1 ,
title : 'Some Blog Post' ,
date : new Date ( 1426271670524 )
} ,
{
id : 2 ,
title : 'Another Blog Post' ,
date : new Date ( 1426278870524 )
}
] ;
posts . forEach ( function ( post ) {
console . log ( rf . format ( post . date ) ) ;
} ) ;
// => "3 hours ago"
// => "1 hour ago" Варианты стиля для "best fit" («вчера») и "numeric" («1 день назад») на основе пороговых значений.
Варианты подразделений для всегда рендеринга в определенной единице; Например, «30 дней назад» вместо «1 месяц назад».
Способность указать значение «сейчас», из которого рассчитывается относительное время, позволяющее format() .
Выход формата в относительных строках времени с использованием `intl.relativememormatormat
Оптимизировано для повторных вызовов в метод format() экземпляра IntlRelativeFormat ().
Intl -зависимость Этот пакет предполагает следующие возможности от Intl :
Intl.PluralRulesIntl.RelativeTimeFormatЕсли ваша среда не поддерживает их, не стесняйтесь захватывать полифиллы:
Установите пакет и полифилл:
npm install intl-relativeformat --save Просто require() этот пакет:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ;
var rf = new IntlRelativeFormat ( 'en' ) ;
var output = rf . format ( dateValue ) ;Установить пакет:
npm install intl-relativeformat --save Просто require() этот пакет и конкретные локалы, которые вы хотите поддержать в пакете:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ; ПРИМЕЧАНИЕ. В Node.js данные для всех 200+ языков загружаются вместе с библиотекой, но при объединении их с помощью браузерофификации/Webpack данные намеренно игнорируются (см. package.json для более подробной информации), чтобы избежать взорвания размера пакета с помощью данных, которые вам могут не понадобиться.
IntlRelativeFormat Constructor Чтобы отформатировать дату в относительное время, используйте конструктор IntlRelativeFormat . Конструктор принимает два параметра:
Локал - {String | String []} - строка с языковой тегом BCP 47 или массивом таких строк. Если вы не предоставите локаль, будет использоваться локаль по умолчанию. Когда предоставляется массив локалов, каждый пункт и его предки проверяются, а первый с зарегистрированными данными локали возвращается. См.: Резолюция локали для более подробной информации.
[options] - {Object} - Необязательный объект с пользовательскими параметрами для стилей формата. Смотрите: пользовательские параметры для более подробной информации.
ПРИМЕЧАНИЕ. Экземпляр rf должен быть достаточно для всего вашего приложения, если вы не хотите использовать пользовательские параметры.
IntlRelativeFormat использует процесс разрешения локали, аналогичный процессу встроенного API Intl , чтобы определить, какие данные локали использовать на основе значения locales передаваемого конструктору. Результат этого процесса разрешения может быть определена методом прототипа Call The resolvedOptions() .
Ниже приведены абстрактные шаги IntlRelativeFormat , чтобы разрешить значение локали:
Если никаких дополнительных локальных данных не загружено, локаль всегда будет решать "en" .
Если данные локали отсутствуют для локали листьев, такой как "fr-FR" , но в данном случае есть данные для одного из его предков, "fr" в данном случае, то его предок будет использоваться.
Если есть данные для указанной локали, то этот локаль будет разрешен; т.е.
var rf = new IntlRelativeFormat ( 'en-US' ) ;
assert ( rf . resolvedOptions ( ) . locale === 'en-US' ) ; // true Решенные локалы теперь нормализованы; Например, "en-us" решится: "en-US" .
ПРИМЕЧАНИЕ. Когда для locales предусмотрено массив, приведенные выше шаги случаются для каждого элемента в этом массиве, пока не будет найдено совпадение.
Необязательные options второго аргумента предоставляют способ настроить то, как будет отформатировано относительное время.
By default, the relative time is computed to the best fit unit, but you can explicitly call it to force units to be displayed in "second" , "second-short" , "second-narrow" , "minute" , "minute-short" , "minute-narrow" , "hour" , "hour-short" , "hour-narrow" , "day" , "day-short" , "day-narrow" , "month" , "month-short" , "month-narrow" , "year" , "year-short" или "year-narrow" :
var rf = new IntlRelativeFormat ( 'en' , {
units : 'day'
} ) ;
var output = rf . format ( dateValue ) ;В результате выпуск будет «70 дней назад» вместо «2 месяца назад».
По умолчанию относительное время рассчитывается как "best fit" , что означает, что вместо «1 день назад» оно будет отображать «вчера», или «за 1 год» будет «в следующем году» и т. Д., Но вы можете всегда использовать «числовую» альтернативу:
var rf = new IntlRelativeFormat ( 'en' , {
style : 'numeric'
} ) ;
var output = rf . format ( dateValue ) ;В результате вывод будет «1 день назад» вместо «вчера».
resolvedOptions() Метод Этот метод возвращает объект со значениями параметров, которые были разрешены во время создания экземпляра. В настоящее время он содержит только собственность locale ; Вот пример:
var rf = new IntlRelativeFormat ( 'en-us' ) ;
console . log ( rf . resolvedOptions ( ) . locale ) ; // => "en-US" Обратите внимание, как указанная локаль была всемирным значением: "en-us" , но он был разрешен и нормализован: "en-US" .
format(date, [options]) Метод Метод формата ( который принимает дату JavaScript Date или TimeStamp ) и дополнительные аргументы options будут сравнивать date с «теперь» (или options.now ) и возвращает форматированную строку; Например, «3 часа назад» в соответствующей локале передано в конструктор.
var output = rf . format ( new Date ( ) ) ;
console . log ( output ) ; // => "now" Если вы хотите указать значение «сейчас», оно может быть предоставлено с помощью options.now Date.now()
Это программное обеспечение может бесплатно использовать под Yahoo! Inc. BSD Лицензия. См. Файл лицензии для текста лицензии и информации об авторском праве.