在前端开发中,处理日期和时间是一个非常常见的需求。而在不同的国家和地区,人们对于日期和时间的表达方式也有所不同。为了满足不同地区用户的需求,ECMAScript 2021 新增了 Intl 国际化对象,用于处理日期和时间的国际化。
Intl 国际化对象
Intl 是 ECMAScript 2015 引入的一个全局对象,用于处理国际化。在 ECMAScript 2021 中,Intl 对象新增了一些方法,用于处理日期和时间的国际化。
DateTimeFormat
DateTimeFormat 是 Intl 对象新增的一个构造函数,用于创建一个日期和时间格式化器。使用 DateTimeFormat 可以将日期和时间格式化为不同语言和地区的格式。
DateTimeFormat 构造函数的语法如下:
new Intl.DateTimeFormat([locales[, options]])
其中,locales 参数是一个数组,用于指定要使用的语言和地区。如果不指定该参数,则使用浏览器的默认语言和地区。
options 参数是一个对象,用于指定格式化的选项。常用的选项有:
year
:年份的显示格式,可以是 "numeric"(数字)、"2-digit"(两位数字)或 "long"(完整的年份)。month
:月份的显示格式,可以是 "numeric"、"2-digit" 或 "narrow"(缩写)。day
:日期的显示格式,可以是 "numeric" 或 "2-digit"。weekday
:星期几的显示格式,可以是 "narrow"(缩写)、"short"(短格式)或 "long"(完整格式)。hour
:小时的显示格式,可以是 "numeric"、"2-digit" 或 "auto"(自动)。minute
:分钟的显示格式,可以是 "numeric" 或 "2-digit"。second
:秒数的显示格式,可以是 "numeric" 或 "2-digit"。hour12
:是否使用 12 小时制,默认为 false(使用 24 小时制)。
下面是一个使用 DateTimeFormat 格式化日期和时间的示例:
// javascriptcn.com 代码示例 const date = new Date('2022-01-01T00:00:00'); const formatter = new Intl.DateTimeFormat('zh-CN', { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric', hour12: false, }); console.log(formatter.format(date)); // 输出:2022年1月1日 0:0:0
在上面的示例中,我们使用 DateTimeFormat 创建了一个日期和时间格式化器,使用 zh-CN
指定了语言和地区为中文简体。然后,我们将一个日期对象传给了格式化器的 format
方法,得到了格式化后的日期和时间字符串。
RelativeTimeFormat
RelativeTimeFormat 是 Intl 对象新增的另一个构造函数,用于创建一个相对时间格式化器。使用 RelativeTimeFormat 可以将时间差格式化为易于理解的相对时间。
RelativeTimeFormat 构造函数的语法如下:
new Intl.RelativeTimeFormat([locales[, options]])
其中,locales 和 options 参数的含义与 DateTimeFormat 相同。
下面是一个使用 RelativeTimeFormat 格式化相对时间的示例:
const formatter = new Intl.RelativeTimeFormat('en', { style: 'long' }); console.log(formatter.format(-1, 'day')); // 输出:yesterday console.log(formatter.format(1, 'day')); // 输出:tomorrow console.log(formatter.format(-2, 'week')); // 输出:2 weeks ago console.log(formatter.format(2, 'week')); // 输出:in 2 weeks
在上面的示例中,我们使用 RelativeTimeFormat 创建了一个相对时间格式化器,使用 en
指定了语言和地区为英文。然后,我们分别将 -1、1、-2 和 2 传给了格式化器的 format
方法,以及要格式化的时间单位(day 和 week),得到了相应的相对时间字符串。
总结
使用 Intl 对象可以轻松地处理日期和时间的国际化。通过 DateTimeFormat 和 RelativeTimeFormat,我们可以将日期和时间格式化为不同语言和地区的格式,以及将时间差格式化为易于理解的相对时间。这些方法的使用非常简单,但对于开发多语言应用程序来说却是非常重要的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6510e23195b1f8cacd9440d6