Paket ini telah menyimpang dari spesifikasi Intl.RelativeTimeFormat agak berat. Oleh karena itu, kami telah mencela paket ini dan menambahkan `@formatjs/intl-relativetimeformat sebagai polyfill yang sesuai spec.
units (seperti day-short ) harus dimigrasi serupa dengan: 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 akan menjadi numeric: always per spec (yang juga default) 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' sedikit lebih rumit tetapi kami telah merilis @formatjs/intl-utils untuk meringankan transisi: 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 Sekarang dalam format , Anda dapat menggunakan formatjs/intl-utils untuk transisi juga 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
) ;Format JavaScript tanggal string waktu relatif (misalnya, "3 jam yang lalu").
Paket ini bertujuan untuk menyediakan cara untuk memformat variasi waktu relatif yang berbeda. Anda dapat menggunakan paket ini di browser dan di server melalui node.js.
Implementasi ini sangat mirip dengan momen.js, dalam konsep, meskipun hanya menyediakan fitur pemformatan berdasarkan data lokal Unicode CLDR, standar industri yang mendukung lebih dari 200 bahasa.
var rf = new IntlRelativeFormat ( locales , [ options ] ) ; locales dapat berupa tag bahasa tunggal, misalnya, "en-US" atau array dari mana pertandingan pertama akan digunakan. options menyediakan cara untuk mengontrol output dari string waktu relatif yang diformat.
var output = rf . format ( someDate , [ options ] ) ; Cara paling umum untuk menggunakan pustaka ini adalah dengan membangun instance IntlRelativeFormat dan menggunakannya kembali berkali -kali untuk memformat nilai tanggal yang berbeda; misalnya:
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" Opsi gaya untuk "best fit" ("kemarin") dan "numeric" ("1 day day") output berdasarkan ambang batas.
Opsi unit untuk selalu rendering di unit tertentu; misalnya "30 hari yang lalu", bukan "1 bulan yang lalu".
Kemampuan untuk menentukan nilai "sekarang" dari mana waktu relatif dihitung, memungkinkan format() .
Format output dalam string waktu relatif menggunakan `intl.relativetimeformat
Dioptimalkan untuk panggilan berulang ke metode IntlRelativeFormat 's format() .
Intl Paket ini mengasumsikan kemampuan berikut dari Intl :
Intl.PluralRulesIntl.RelativeTimeFormatJika lingkungan Anda tidak mendukungnya, jangan ragu untuk mengambil polyfill:
Instal Paket dan Polyfill:
npm install intl-relativeformat --save Hanya require() paket ini:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ;
var rf = new IntlRelativeFormat ( 'en' ) ;
var output = rf . format ( dateValue ) ;Instal Paket:
npm install intl-relativeformat --save Cukup require() paket ini dan lokal spesifik yang ingin Anda dukung di bundel:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ; Catatan: Di Node.js, data untuk semua 200+ bahasa dimuat bersama dengan perpustakaan, tetapi ketika menggabungkannya dengan browserify/webpack, data sengaja diabaikan (lihat package.json untuk detail lebih lanjut) untuk menghindari meledakkan ukuran bundel dengan data yang mungkin tidak Anda butuhkan.
IntlRelativeFormat Untuk memformat tanggal untuk waktu relatif, gunakan konstruktor IntlRelativeFormat . Konstruktor mengambil dua parameter:
Lokal - {String | String []} - String dengan tag bahasa BCP 47, atau array dari string tersebut. Jika Anda tidak menyediakan lokal, lokal default akan digunakan. Ketika berbagai daerah disediakan, setiap item dan lokal leluhurnya diperiksa dan yang pertama dengan data lokal terdaftar dikembalikan. Lihat: Resolusi lokal untuk lebih jelasnya.
[Opsi] - {Object} - Objek opsional dengan opsi yang ditentukan pengguna untuk gaya format. Lihat: Opsi khusus untuk detail lebih lanjut.
Catatan: Instance rf harus cukup untuk seluruh aplikasi Anda, kecuali jika Anda ingin menggunakan opsi khusus.
IntlRelativeFormat menggunakan proses resolusi lokal yang mirip dengan API Intl bawaan untuk menentukan data lokal mana yang akan digunakan berdasarkan nilai locales yang diteruskan ke konstruktor. Hasil dari proses resolusi ini dapat ditentukan dengan memanggil metode prototipe resolvedOptions() .
Berikut ini adalah langkah -langkah abstrak IntlRelativeFormat untuk menyelesaikan nilai lokal:
Jika tidak ada data lokal tambahan yang dimuat, lokal akan selalu diselesaikan menjadi "en" .
Jika data lokal tidak ada untuk lokal seperti "fr-FR" , tetapi ada data untuk salah satu leluhurnya, "fr" dalam kasus ini, maka leluhurnya akan digunakan.
Jika ada data untuk lokal yang ditentukan, maka lokal itu akan diselesaikan; yaitu,
var rf = new IntlRelativeFormat ( 'en-US' ) ;
assert ( rf . resolvedOptions ( ) . locale === 'en-US' ) ; // true Lokal yang diselesaikan sekarang dinormalisasi; misalnya, "en-us" akan menyelesaikannya: "en-US" .
Catatan: Ketika sebuah array disediakan untuk locales , langkah -langkah di atas terjadi untuk setiap item dalam array itu sampai kecocokan ditemukan.
options argumen kedua opsional menyediakan cara untuk menyesuaikan bagaimana waktu relatif akan diformat.
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" atau "year-narrow" :
var rf = new IntlRelativeFormat ( 'en' , {
units : 'day'
} ) ;
var output = rf . format ( dateValue ) ;Akibatnya, outputnya akan "70 hari yang lalu" bukannya "2 bulan yang lalu".
Secara default, waktu relatif dihitung sebagai "best fit" , yang berarti bahwa alih -alih "1 hari yang lalu", itu akan menampilkan "kemarin", atau "dalam 1 tahun" akan menjadi "tahun depan", dll. Tetapi Anda dapat memaksa untuk selalu menggunakan alternatif "numerik":
var rf = new IntlRelativeFormat ( 'en' , {
style : 'numeric'
} ) ;
var output = rf . format ( dateValue ) ;Akibatnya, outputnya akan "1 hari yang lalu" bukannya "kemarin".
resolvedOptions() Metode ini mengembalikan objek dengan nilai opsi yang diselesaikan selama pembuatan instance. Saat ini hanya berisi properti locale ; Inilah contohnya:
var rf = new IntlRelativeFormat ( 'en-us' ) ;
console . log ( rf . resolvedOptions ( ) . locale ) ; // => "en-US" Perhatikan bagaimana lokal yang ditentukan adalah nilai semua kasus rendah: "en-us" , tetapi diselesaikan dan dinormalisasi menjadi: "en-US" .
format(date, [options]) Metode format ( yang mengambil tanggal javascript atau stempel waktu ) dan argumen options opsional akan membandingkan date dengan "sekarang" (atau options.now ), dan mengembalikan string yang diformat; misalnya, "3 jam yang lalu" di lokasi yang sesuai masuk ke konstruktor.
var output = rf . format ( new Date ( ) ) ;
console . log ( output ) ; // => "now" Jika Anda ingin menentukan nilai "sekarang", itu dapat disediakan melalui options.now Sekarang dan akan digunakan sebagai pengganti Date.now() untuk mendapatkan nilai "sekarang" saat ini.
Perangkat lunak ini bebas digunakan di bawah Yahoo! Lisensi BSD Inc. Lihat file lisensi untuk teks lisensi dan informasi hak cipta.