Este paquete se ha desviado de la especificación Intl.RelativeTimeFormat bastante en gran medida. Por lo tanto, hemos desaprobado este paquete y agregamos `@formatjs/intl-relativeMeformat como el polyfill que cumple con las especificaciones.
units (como day-short ) deben migrarse de manera similar a: 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 se volverá numeric: always por especificación (que también es el valor predeterminado) 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' es un poco más complicado, pero hemos lanzado @formatjs/intl-utils para aliviar la transición: 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
) ;options.now Ahora en format , también puede usar formatjs/intl-utils a la transición 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
) ;Formatos de JavaScript fechas a las cuerdas de tiempo relativas (por ejemplo, "hace 3 horas").
Este paquete tiene como objetivo proporcionar una forma de formatear diferentes variaciones de tiempo relativo. Puede usar este paquete en el navegador y en el servidor a través de Node.js.
Esta implementación es muy similar a Moment.js, en concepto, aunque solo proporciona características de formato basadas en los datos locales de Unicode CLDR, un estándar de la industria que admite más de 200 idiomas.
var rf = new IntlRelativeFormat ( locales , [ options ] ) ; Los locales pueden ser una etiqueta de idioma única, por ejemplo, "en-US" o una matriz de ellos desde la cual se utilizará la primera coincidencia. options proporcionan una forma de controlar la salida de la cadena de tiempo relativa formateada.
var output = rf . format ( someDate , [ options ] ) ; La forma más común de usar esta biblioteca es construir una instancia IntlRelativeFormat y reutilizarla muchas veces para formatear diferentes valores de fecha; p.ej:
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" Opciones de estilo para la salida "best fit" ("ayer") y "numeric" ("hace 1 día") basada en umbrales.
Opciones de unidades para siempre renderizar en una unidad en particular; Por ejemplo, "hace 30 días", en lugar de "hace 1 mes".
Capacidad para especificar el valor "ahora" del que se calcula el tiempo relativo, lo que permite format() .
Salida de formato en cadenas de tiempo relativas utilizando `intl.RelativeTimeFormat
Optimizado para llamadas repetidas a un método format() de instancia IntlRelativeFormat .
Intl Este paquete asume las siguientes capacidades de Intl :
Intl.PluralRulesIntl.RelativeTimeFormatSi su entorno no lo admite, no dude en obtener polyfills:
Instalar paquete y polyfill:
npm install intl-relativeformat --save Simplemente require() este paquete:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ;
var rf = new IntlRelativeFormat ( 'en' ) ;
var output = rf . format ( dateValue ) ;Paquete de instalación:
npm install intl-relativeformat --save Simplemente require() este paquete y los lugares específicos que desea admitir en el paquete:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ; Nota: En Node.js, los datos para los más de 200 idiomas se cargan junto con la biblioteca, pero al agruparlo con Browserify/Webpack, los datos se ignoran intencionalmente (ver package.json para obtener más detalles) para evitar explotar el tamaño del paquete con datos que no necesita.
IntlRelativeFormat Para formatear una fecha para la hora relativa, use el constructor IntlRelativeFormat . El constructor toma dos parámetros:
Locos - {cadena | String []} - Una cadena con una etiqueta de idioma BCP 47, o una matriz de tales cadenas. Si no proporciona una ubicación local, se utilizará la ubicación predeterminada. Cuando se proporciona una variedad de locales, cada elemento y sus locales de antepasados se verifican y se devuelve el primero con datos de locales registrados. Ver: Resolución local para más detalles.
[Opciones] - {objeto} - Objeto opcional con opciones definidas por el usuario para estilos de formato. Consulte: Opciones personalizadas para más detalles.
Nota: La instancia rf debe ser suficiente para toda su aplicación, a menos que desee usar opciones personalizadas.
IntlRelativeFormat utiliza un proceso de resolución local similar al de las API Intl incorporadas para determinar qué datos locales usar en función del valor locales pasados al constructor. El resultado de este proceso de resolución se puede determinar mediante la llamada del método prototipo resolvedOptions() .
Los siguientes son los pasos abstractos que IntlRelativeFormat realiza para resolver el valor de la localidad:
Si no se cargan datos de locales adicionales, la configuración regional siempre se resolvió a "en" .
Si faltan datos locales para un lugar de hoja como "fr-FR" , pero hay datos para uno de sus antepasados, "fr" en este caso, entonces se utilizará su antepasado.
Si hay datos para la configuración regional especificada, entonces se resolverá esa ubicación; es decir,
var rf = new IntlRelativeFormat ( 'en-US' ) ;
assert ( rf . resolvedOptions ( ) . locale === 'en-US' ) ; // true Los lugares resueltos ahora están normalizados; por ejemplo, "en-us" resolverá: "en-US" .
Nota: Cuando se proporciona una matriz para locales , los pasos anteriores ocurren para cada elemento en esa matriz hasta que se encuentra una coincidencia.
Las options de argumento opcional de la segunda proporcionan una forma de personalizar cómo se formateará el tiempo relativo.
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" o "year-narrow" :
var rf = new IntlRelativeFormat ( 'en' , {
units : 'day'
} ) ;
var output = rf . format ( dateValue ) ;Como resultado, la salida será "hace 70 días" en lugar de "hace 2 meses".
Por defecto, el tiempo relativo se calcula como "best fit" , lo que significa que en lugar de "hace 1 día", se mostrará "ayer", o "en 1 año" será "el próximo año", etc. Pero puede forzar siempre usar la alternativa "numérica":
var rf = new IntlRelativeFormat ( 'en' , {
style : 'numeric'
} ) ;
var output = rf . format ( dateValue ) ;Como resultado, la salida será "hace 1 día" en lugar de "ayer".
resolvedOptions() Este método devuelve un objeto con los valores de opciones que se resolvieron durante la creación de instancias. Actualmente solo contiene una propiedad locale ; Aquí hay un ejemplo:
var rf = new IntlRelativeFormat ( 'en-us' ) ;
console . log ( rf . resolvedOptions ( ) . locale ) ; // => "en-US" Observe cómo la ubicación especificada era el valor de mayor caso: "en-us" , pero se resolvió y se normalizó a: "en-US" .
format(date, [options]) El método de formato ( que toma una fecha de JavaScript o una marca de tiempo ) y los argumentos options opcionales compararán la date con "Now" (u options.now ), y devuelve la cadena formatada; Por ejemplo, "hace 3 horas" en el localidad correspondiente pasó al constructor.
var output = rf . format ( new Date ( ) ) ;
console . log ( output ) ; // => "now" Si desea especificar un valor Date.now() ahora", se puede proporcionar a través de options.now .
Este software es gratuito bajo el Yahoo! Inc. Licencia BSD. Consulte el archivo de licencia para ver el texto de la licencia y la información de derechos de autor.