该软件包与Intl.RelativeTimeFormat规格偏离。因此,我们已经弃用了此软件包,并添加`@formatjs/intl-relativetimeformat作为符合规格的polyfill。
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
) ;options.now format ,则可以使用formatjs/intl-utils进行过渡 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在浏览器和服务器上使用此软件包。
该实现与MONT.JS在概念上非常相似。
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.relativetimeformat中的相对时间字符串的格式输出
针对重复调用IntlRelativeFormat实例的format()方法进行了优化。
Intl依赖性该软件包假定Intl的以下功能:
Intl.PluralRulesIntl.RelativeTimeFormat如果您的环境不支持这些,请随时抓住多填充:
安装软件包和polyfill:
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多种语言的数据都与库一起加载,但是当将其与browserify/webpack捆绑在一起时,有意忽略了数据(有关更多详细信息,请参见package.json ),以避免用可能不需要的数据炸毁捆绑包的大小。
IntlRelativeFormat构造函数要将日期格式化为相对时间,请使用IntlRelativeFormat构造函数。构造函数采用两个参数:
LOCERES- {字符串|字符串[]} - 具有BCP 47语言标签的字符串或此类字符串数组。如果您不提供语言环境,则将使用默认场所。提供一系列位置时,将检查每个项目及其祖先地点,并返回带有注册语言环境数据的第一个。请参阅:本地分辨率有关更多详细信息。
[选项] - {Object} - 具有用户定义的格式样式选项的可选对象。请参阅:自定义选项以获取更多详细信息。
注意:除非您要使用自定义选项,否则rf实例应该足够整个应用程序。
IntlRelativeFormat使用类似于内置Intl API的区域分辨率过程,以确定基于传递给构造函数的locales值使用的语言环境数据。该分辨率过程的结果可以通过调用resolvedOptions()原型方法来确定。
以下是IntlRelativeFormat进行的抽象步骤来解析语言环境值:
如果没有加载额外的语言环境数据,则该语言环境将始终解决为"en" 。
如果诸如"fr-FR"之类的叶片区域缺少该位置数据,但是有一个祖先的数据,在这种情况下, "fr" ,则将使用其祖先。
如果有指定的语言环境的数据,则该区域将解决; IE,
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年”将是“明年”等。但是您可以强迫始终使用“数字”替代方案:
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日期或时间戳)和可选options参数将将date与“ NOW”(或options.now )进行比较,并返回格式化的字符串;例如,“ 3小时前”在相应的语言环境中传递到构造函数中。
var output = rf . format ( new Date ( ) ) ;
console . log ( output ) ; // => "now"如果您希望指定“现在”值,则可以通过options.now提供它,并将使用而不是查询Date.now()以获取当前的“现在”值。
该软件可以在Yahoo!下免费使用。 Inc. BSD许可证。有关许可文本和版权信息,请参见许可证文件。