返回
Day.js 解析(二):Dayjs 类
前端
2023-10-21 08:08:25
Dayjs.js 是一个轻量级的日期操作库,兼容 Moment.js,有着比 Moment.js 更小的体积(约 2kB,gzip 后)和更快的性能。Dayjs.js 提供了丰富的日期处理 API,并支持链式调用。
正文
上篇 —— dayjs 源码解析(一):概念、locale、constant、utils —— 继续解析 dayjs 的源码。本篇主要分析 dayjs 源码中最核心的部分,也就是 src/index.js 中的 Dayjs 类。为什么要把 constant.js、util.js、locale.js 单独拎出来讲呢?因为 Dayjs 类中用到了这几个模块中的很多东西。
Dayjs 类的构造函数
/* ... */
class Dayjs {
/* ... */
constructor (config) {
this.$d = utils.isDate(config) ? config : utils.createUTCDate(config)
this.$l = locale()
this.parse(config)
}
/* ... */
}
/* ... */
Dayjs 类的构造函数接受一个 config 参数,可以是 Date 对象或一个字符串(表示日期或时间)。如果 config 是一个 Date 对象,则直接赋值给 this.d 属性;如果 config 是一个字符串,则调用 utils.createUTCDate() 方法创建一个 UTC 日期对象并赋值给 this.d 属性。
this.$l 属性存储当前的语言环境,通过 locale() 方法获取。
parse() 方法负责解析 config 参数,并将解析结果存储在 this.$d 属性中。
Dayjs 类的属性
Dayjs 类定义了几个属性,用于存储日期、时间和语言环境等信息。
- this.$d :存储日期对象。
- this.$l :存储当前的语言环境。
- this.dep :存储依赖的 Dayjs 实例。
- this.utc :指示日期对象是否为 UTC 时间。
- this.valid :指示日期对象是否有效。
Dayjs 类的实例方法
Dayjs 类定义了大量的实例方法,用于操作日期、时间和语言环境等信息。
- add() :添加时间。
- subtract() :减去时间。
- set() :设置日期、时间或语言环境。
- get() :获取日期、时间或语言环境。
- format() :格式化日期。
- diff() :计算两个日期之间的差值。
- endOf() :获取指定单位(如月、年等)的末尾日期。
- startOf() :获取指定单位(如月、年等)的起始日期。
- clone() :克隆当前 Dayjs 实例。
- isValid() :判断日期对象是否有效。
- locale() :设置或获取当前的语言环境。
- utc() :设置或获取当前的 UTC 时间。
结语
Dayjs 类是 dayjs.js 的核心,它提供了丰富的日期处理 API,并支持链式调用。Dayjs 类的构造函数、属性和实例方法构成了 dayjs.js 的核心功能。