ES12 规范中的 Intl.RelativeTimeFormat 是一个可以方便地处理相对时间的 API。相对时间指的是将一个时间值与当前时间相对比,输出一个表示时间差的字符串,如“5 minutes ago”。“ago”和其它相对时间字符串都是根据用户语言和地区进行本地化的。
相对时间表示
在相对时间的表示中,常见的时间单位有:seconds(秒)、minutes(分钟)、hours(小时)、days(天)、weeks(周)、months(月份)、quarters(季度)和 years(年份),每种标准的时间单位都有相应的简写方式:
- 秒:s
- 分钟:min
- 小时:h(或 hr)
- 天:d(或 dy)
- 周:w(或 wk)
- 月:mo
- 季度:qtr
- 年:yr
使用 Intl.RelativeTimeFormat
使用 Intl.RelativeTimeFormat 非常简单,只需传入要表示相对时间的时间差(单位为毫秒),然后可以选择性地传入一些选项,如语言和风格。以下是使用该 API 的示例代码:
const rtf = new Intl.RelativeTimeFormat('en', { numeric: 'auto' }); console.log(rtf.format(-1, 'day')); // "1 day ago" console.log(rtf.format(2, 'month')); // "in 2 months" console.log(rtf.format(-10, 'minute')); // "10 minutes ago"
其中,语言的设置可以控制生成的字符串使用哪种语言,而 style 则可以决定生成的字符串是否含有“ago”或“in”。
本地化
Intl.RelativeTimeFormat 可以帮助我们轻松地本地化相对时间字符串。以下是一个本地化的示例:
const rtf = new Intl.RelativeTimeFormat('zh', { numeric: 'auto' }); console.log(rtf.format(-2, 'day')); // "2 天前" console.log(rtf.format(3, 'week')); // "3 周后"
在语言设置为“zh”的情况下,字符串中使用了中文的的“天前”和“周后”等词汇,这是由系统根据设定的语言进行本地化翻译的。
总结
Intl.RelativeTimeFormat 是一个非常方便的 API,可以帮助我们快速生成本地化的相对时间字符串。无论是在前端还是后端开发中,都可以应用该 API,它能有效地减少代码开发和维护的工作量,同时提高网站或应用程序的用户体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b842e1add4f0e0ff0c9848