使用 Day.js 模块实现国际化日期

day.js 是 Moment.js 的 2kB 轻量化方案,拥有同样强大的 API

安装

NPM:

$ npm i dayjs

CDN:

<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>

你也可以在 day.js 官网的控制台测试该库。

基本用法

引入 dayjs

import dayjs from 'dayjs'

解析

const laborDay = dayjs('2022-5-1')
laborDay
/* M {
  '$L': 'en',
  '$d': 2022-04-30T16:00:00.000Z,
  '$x': {},
  '$y': 2022,
  '$M': 4,
  '$D': 1,
  '$W': 0,
  '$H': 0,
  '$m': 0,
  '$s': 0,
  '$ms': 0
} */

默认情况下,Day.js 使用美国英语(en)语言环境,而我们使用的语言是简体中文(zh-cn),要使用其他语言环境,可以使用 locale 获取或设置时间的国际化:

// 您需要单独引入语言文件,如果不使用,它们不会包含在构建中
// 按需加载中文文件
require('dayjs/locale/zh-cn')

// 只在当前实例中使用
laborDay.locale('zh-cn')
// const laborDay = dayjs('2022-5-1', { locale: 'zh-cn' })
// 全局使用:dayjs.locale('zh-cn')

laborDay
/* M {
  '$L': 'zh-cn',
  ...
*/

显示方法,例如 format

laborDay.format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // {2022} 05-01T00:00:00 000 Z 凌晨
laborDay.format('YYYY MMMM, dddd') // 2022 五月, 星期日
laborDay.format('YYYY-MM-DD') // 2022-05-01

查看所有可用格式的列表

取值和赋值方法,例如 monthset

// 月份数为 0(1月份)- 11(12月份),
laborDay.month() // 4

laborDay.set('month', 5).month() // 5

操作方法,例如 add

laborDay.add(1, 'year').year() // 2023

查询方法,例如 isBeforeisAfter

laborDay.isBefore(dayjs()) // true
laborDay.isAfter(dayjs()) // false

高级用法

插件是一个独立的模块,可以添加到 Day.js 以扩展功能或添加新特性。例如,UTC 插件添加了以 UTC 和本地时间获取日期的方法:

const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')

dayjs.extend(utc)

laborDay.utc().format() // 2022-04-30T16:00:00Z

关于国际化,我们可以使用 AdvancedFormatLocalizedFormatRelativeTimeCalendar 插件。

以下是 Day.js 文档 Calendar 插件的一个示例:

const dayjs = require('dayjs')
const calendar = require('dayjs/plugin/calendar')

dayjs.extend(calendar)

console.log(
  dayjs().calendar(laborDay, {
    sameDay: '[Today at] h:mm A', // The same day ( Today at 2:30 AM )
    nextDay: '[Tomorrow at] h:mm A', // The next day ( Tomorrow at 2:30 AM )
    nextWeek: 'dddd [at] h:mm A', // The next week ( Sunday at 2:30 AM )
    lastDay: '[Yesterday at] h:mm A', // The day before ( Yesterday at 2:30 AM )
    lastWeek: '[Last] dddd [at] h:mm A', // Last week ( Last Monday at 2:30 AM )
    sameElse: 'DD/MM/YYYY' // Everything else ( 17/10/2011 )
  })
)
// Today at 10:04 PM
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容