Dieses Paket ist von der Intl.RelativeTimeFormat -Spezifikation ziemlich stark abgewichen. Daher haben wir dieses Paket veraltet und "@@formatjs/intl-relativeTimeFormat als spezifizierte Polyfill hinzugefügt.
units (z. day-short ) sollten ähnlich migriert werden wie bei: 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 wird numeric: always per Spezifikation (was auch der Standard ist) 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' ist etwas schwieriger, aber wir haben @formatjs/intl-utils veröffentlicht, um den Übergang zu erleichtern: 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 verwendet haben. Jetzt im format , können Sie auch formatjs/intl-utils zum Übergang verwenden 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
) ;Formate JavaScript datiert zu relativen Zeitzeichenfolgen (z. B. "vor 3 Stunden").
Dieses Paket zielt darauf ab, eine Möglichkeit zu bieten, unterschiedliche Variationen der relativen Zeit zu formatieren. Sie können dieses Paket im Browser und auf dem Server über node.js.
Diese Implementierung ist im Konzept sehr ähnlich.
var rf = new IntlRelativeFormat ( locales , [ options ] ) ; Die locales können entweder ein einzelner Sprach-Tag sein, z. B. "en-US" oder ein Array von ihnen, aus denen die erste Übereinstimmung verwendet wird. options bieten eine Möglichkeit, die Ausgabe der formatierten relativen Zeitzeichenfolge zu steuern.
var output = rf . format ( someDate , [ options ] ) ; Die häufigste Möglichkeit, diese Bibliothek zu verwenden, besteht darin, eine IntlRelativeFormat -Instanz zu konstruieren und sie mehrmals für die Formatierung verschiedener Datumswerte wiederverwenden. z.B:
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" Stiloptionen für "best fit" ("gestern") und "numeric" ("vor 1 Tag") Ausgabe, die auf Schwellenwerten basieren.
Einheiten Optionen für immer in einer bestimmten Einheit; zB "vor 30 Tagen" anstelle von "vor 1 Monat".
Fähigkeit, den Wert "jetzt" anzugeben, aus dem die relative Zeit berechnet wird, und ermöglicht format() .
Formatleistung in relativ
Optimiert für wiederholte Aufrufe auf eine IntlRelativeFormat format -Instanz format() -Methode.
Intl Abhängigkeit Dieses Paket setzt die folgenden Funktionen von Intl aus:
Intl.PluralRulesIntl.RelativeTimeFormatWenn Ihre Umgebung diese nicht unterstützt, können Sie gerne Polyfills schnappen:
Paket und Polyfill installieren:
npm install intl-relativeformat --save Einfach require() dieses Paket:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ;
var rf = new IntlRelativeFormat ( 'en' ) ;
var output = rf . format ( dateValue ) ;Paket installieren:
npm install intl-relativeformat --save Einfach require() dieses Paket und die spezifischen Orte, die Sie im Bundle unterstützen möchten:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ; HINWEIS: In Node.js werden die Daten für alle über 200 Sprachen zusammen mit der Bibliothek geladen. Wenn Sie sie jedoch mit Browserify/WebPack bündeln, werden die Daten absichtlich ignoriert (siehe package.json für weitere Details), um die Größe des Bündels mit Daten zu vermeiden, die Sie möglicherweise nicht benötigen.
IntlRelativeFormat -Konstruktor Verwenden Sie den IntlRelativeFormat -Konstruktor, um ein Datum bis zur relativen Zeit zu formatieren. Der Konstruktor nimmt zwei Parameter ein:
Orte - {String | String []} - Eine Zeichenfolge mit einem BCP 47 -Sprach -Tag oder einem Array solcher Zeichenfolgen. Wenn Sie kein Gebietsschema angeben, wird das Standardgebietsschema verwendet. Wenn eine Reihe von Lokalen bereitgestellt wird, werden jedes Element und seine Vorfahren überprüft und die erste mit registrierten Gebietsschemasdaten zurückgegeben. Weitere Informationen finden Sie in der Lösung: Lokale.
[Optionen] - {Objekt} - Optionales Objekt mit benutzerdefinierten Optionen für Formatstile. Weitere Informationen finden Sie für benutzerdefinierte Optionen.
Hinweis: Die rf -Instanz sollte für Ihre gesamte Anwendung ausreichen, es sei denn, Sie möchten benutzerdefinierte Optionen verwenden.
IntlRelativeFormat verwendet einen Lautstecherauflösungsprozess, der dem der integrierten Intl APIs ähnelt, um zu bestimmen, welche Gebietsschemas anhand des an den Konstruktors übergebenen locales verwendet werden sollen. Das Ergebnis dieses Auflösungsprozesses kann durch Aufrufen der Prototypmethode " resolvedOptions() bestimmt werden.
Im Folgenden sind die abstrakten Schritte aufgeführt, IntlRelativeFormat durchläuft, um den Gebietsschemawert zu lösen:
Wenn keine zusätzlichen Gebietsschemasdaten geladen sind, wird das Gebietsschema immer auf "en" aufgelöst.
Wenn für ein Blattgebiet wie "fr-FR" Gebietsschema fehlt, es jedoch Daten für einen seiner Vorfahren "fr" in diesem Fall gibt , wird der Vorfahr verwendet.
Wenn es Daten für das angegebene Gebietsschema gibt, wird dieses Gebietsschema gelöst. dh,,
var rf = new IntlRelativeFormat ( 'en-US' ) ;
assert ( rf . resolvedOptions ( ) . locale === 'en-US' ) ; // true Die aufgelösten Orte sind jetzt normalisiert; zB "en-us" wird sich entschlossen,: "en-US" .
HINWEIS: Wenn ein Array für locales bereitgestellt wird, erfolgen die oben genannten Schritte für jedes Element in diesem Array, bis eine Übereinstimmung gefunden wird.
Die optionalen zweiten options bieten eine Möglichkeit, um anzupassen, wie die relative Zeit formatiert wird.
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" oder "year-narrow" :
var rf = new IntlRelativeFormat ( 'en' , {
units : 'day'
} ) ;
var output = rf . format ( dateValue ) ;Infolgedessen wird die Ausgabe "vor 70 Tagen" anstelle von "2 Monaten" sein.
Standardmäßig wird die relative Zeit als "best fit" berechnet, was bedeutet, dass anstelle von "vor 1 Tag" "gestern" oder "in 1 Jahr" "nächstes Jahr" usw. angezeigt wird, aber Sie können zwingen, immer die "numerische" Alternative zu verwenden:
var rf = new IntlRelativeFormat ( 'en' , {
style : 'numeric'
} ) ;
var output = rf . format ( dateValue ) ;Infolgedessen wird die Ausgabe "vor 1 Tag" anstelle von "gestern" sein.
resolvedOptions() Methode Diese Methode gibt ein Objekt mit den Optionswerten zurück, die während der Instanzerstellung aufgelöst wurden. Es enthält derzeit nur ein locale . Hier ist ein Beispiel:
var rf = new IntlRelativeFormat ( 'en-us' ) ;
console . log ( rf . resolvedOptions ( ) . locale ) ; // => "en-US" Beachten Sie, wie das angegebene Gebietsschema der Gesamtwert von niedrigerem Fall war: "en-us" , aber es wurde gelöst und normalisiert: "en-US" .
format(date, [options]) Methode Die Formatmethode ( die ein JavaScript -Datum oder ein Zeitstempel annimmt ) und optionale options Argumente werden das date mit "jetzt" (oder options.now ) vergleichen und gibt die formatierte Zeichenfolge zurück. zB "vor 3 Stunden" im entsprechenden Gebietsschema in den Konstruktor überging.
var output = rf . format ( new Date ( ) ) ;
console . log ( output ) ; // => "now" Wenn Sie einen "Jetzt" -Wert angeben möchten, kann er über options.now bereitgestellt werden. Date.now() abzufragen.
Diese Software kann unter dem Yahoo! Inc. BSD -Lizenz. In der Lizenzdatei für Lizenztext und Copyright -Informationen finden Sie.