INTL 相对格式
格式化 JavaScript 日期到相对时间字符串(如"3小时前").
概览
目标
这个软件包旨在提供一种格式化相对时间的不同变化的方法。 您可以在浏览器和服务器上通过Node.js使用此软件包.
这一执行情况与 一分钟。 js,在概念中,虽然它只提供基于 Unicode 的格式化特性 缩略语 地语数据,一种支持200多种语言的行业标准.
说明: IntlRelativeFormat API可能更改以保持与 ECMA-402 的同步, 但此软件包将随同 铸造。 。 。 .
如何运作
这个API与 ECMA 402 欧经委是因为 日期时间格式 财务报告和审定财务报表 数字格式。 。 。 .
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"("一日前")输出. -
总是在特定单元中渲染的单位选项;例如"30天前",而不是"1个月前".
-
能够指定计算相对时间的“现在”值,允许
format()。 。 。 . -
使用相对时间字符串格式化数字
Intl.NumberFormat。 。 。 . -
优化重复呼叫
IntlRelativeFormat实例format()方法.
使用量
Intl 依赖性
这个套装假设: Intl 全球对象存在于运行时. Intl 在所有现代浏览器中都有存在, 并且有工作正在发生 整合 Intl 输入节点.js。 。 。 .
幸运的是,这是 Itl.js (英语) 混合剂! 如果您想要支持运行时间, 您需要有条件地加载多填充 Intl 尚未内置。 见 浏览器兼容表 如果你有疑问.
在节点.js中装入 ItlRelative Format
安装软件包和多填充 :
npm install intl-relativeformat --save
npm install intl --save
简单 require() 此软件包 :
if (!global.Intl) {
global.Intl = require('intl'); // polyfill for `Intl`
}
var IntlRelativeFormat = require('intl-relativeformat');
var rf = new IntlRelativeFormat('en');
var output = rf.format(dateValue);
注:在Node.js中,所有200+语言的数据与库一起被加载.
在浏览器中装入 ItlRelative Format
如果浏览器还没有 Intl API 内置, Intl. js Polyfill 需要加载到页面上, 以及任何需要支持的地块的地块数据 :
<script src="intl/Intl.min.js"></script>
<script src="intl/locale-data/jsonp/en-US.js"></script>
注意:现代浏览器已经拥有了 Intl API 内置, 这样您可以有条件地装入 Intl.js Polyfill, 通过检查 window.Intl。 。 。 .
在您的页面中包含库 :
<script src="intl-relativeformat/dist/intl-relativeformat.min.js"></script>
默认情况下,带有英语语言数据的 Intl 相对Format 船 (en) 内置到运行时图书馆. 当您需要将数据格式化到另一个地方时,请输入其数据;例如,法语:
<script src="intl-relativeformat/dist/locale-data/fr.js"></script>
注:本套件所支持的所有200+语言都使用其root BCP 47语言标记;即第一个连字符前的部分(如果有的话).
用浏览器/ Webpack 装入内存格式
安装软件包 :
npm install intl-relativeformat --save
简单 require() 此软件包以及您想要在捆绑中支持的具体地址 :
var IntlRelativeFormat = require('intl-relativeformat');
require('intl-relativeformat/dist/locale-data/en.js');
require('intl-relativeformat/dist/locale-data/fr.js');
注:在Node.js中,所有200+语言的数据都与库一起被加载,但在将数据与浏览器/Webpack捆绑时,会故意忽略这些数据(见 package.json )以避免用你可能不需要的数据炸毁捆绑的大小.
公共 API
IntlRelativeFormat 构造器
要格式化日期与相对时间,请使用 IntlRelativeFormat 建筑师。 构造器需要两个参数:
-
语言 - 说吧 {String } 字符串 [ ] - 带有BCP 47语言标记的字符串,或此类字符串的数组。 如果您不提供地语, 默认地语将被使用 。 当提供一系列的地块时,检查每个项及其祖先地块,并返回第一个有已注册地块数据的地块. 见: 本地分辨率 更多细节.
-
[可选 - 说吧 {对象} - 有用户定义的格式样式选项的可选对象. 见: 自定义选项 更多细节.
说明: rf 实例应足够用于整个应用程序,除非您想要使用自定义选项.
本地分辨率
IntlRelativeFormat 使用类似于内置的本地解析过程 Intl APIs ,用于根据 locales 值传递给构造器。 该决议进程的结果可通过呼叫 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 提供了一种自定义相对时间格式的方法.
单位
默认情况下,相对时间是计算到最合适的单位,但可以明确调用强制 units 显示于 "second", (中文(简体) ), "second-short", (中文(简体) ), "minute", (中文(简体) ), "minute-short", (中文(简体) ), "hour", (中文(简体) ), "hour-short", (中文(简体) ), "day", (中文(简体) ), "day-short", (中文(简体) ), "month", (中文(简体) ), "month-short", (中文(简体) ), "year" 或者说 "year-short"数字 :
var rf = new IntlRelativeFormat('en', {
units: 'day'
});
var output = rf.format(dateValue);
因此,产出将是"70天前",而不是"2个月前".
样式
默认情况下,相对时间计算为 "best fit",也就是说,与其说是"一日前",而是会显示"元旦",或"一年内"会是"明年"等. 但您可以强制使用“ 数字” 选项 :
var rf = new IntlRelativeFormat('en', {
style: 'numeric'
});
var output = rf.format(dateValue);
因此,产出将取"一出一出"而不用"一出".
resolvedOptions() 方法
此方法返回对象, 包含实例创建过程中解决的选项值 。 目前只包含 locale 属性; 示例如下:
var rf = new IntlRelativeFormat('en-us');
console.log(rf.resolvedOptions().locale); // => "en-US"
通知指定的地块如何是所有小写值 : "en-us",但决定并正常化为: "en-US"。 。 。 .
format(date, [options]) 方法
格式方法( E)它需要 JavaScript 日期或时间戳)和可选 options 参数将比较 date 与"现在"(或 options.now),并返回已格式化的字符串;例如,在相应的地块中“3小时前”传入构造器.
var output = rf.format(new Date());
console.log(output); // => "now"
如果您想要指定“ 现在” 值, 可以通过 options.now 而不是查询 Date.now() 以获取当前“现在”值.
许可证
这个软件可以在雅虎下自由使用! BSD许可证. 见 自由文件 许可证文本和版权信息.