美文网首页
DayJs源码(三)Dayjs类初始化

DayJs源码(三)Dayjs类初始化

作者: 小q | 来源:发表于2021-04-30 14:57 被阅读0次

看完了dayjs函数,接下来就看 Dayjs类。

先来看类初始化部分

const parseDate = (cfg) => {
  const { date, utc } = cfg // 解构出date
  if (date === null) return new Date(NaN) // null is invalid
  if (Utils.u(date)) return new Date() // today // 这是不传值的情况,Utils.u对应utils.js中的isUndefined方法
  if (date instanceof Date) return new Date(date) // 传入了时间
  if (typeof date === 'string' && !/Z$/i.test(date)) { // 如果传入date为string
    const d = date.match(C.REGEX_PARSE) //C.REGEX_PARSE = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/
    if (d) {
      const m = d[2] - 1 || 0
      const ms = (d[7] || '0').substring(0, 3)
      if (utc) {
        return new Date(Date.UTC(d[1], m, d[3]
          || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms))
      }
      return new Date(d[1], m, d[3]
          || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms)
    }
  }

  return new Date(date) // everything else
}

class Dayjs {
  constructor(cfg) {
    this.$L = parseLocale(cfg.locale, null, true) // 将语言赋值
    this.parse(cfg) // for plugin
  }

  parse(cfg) {
    this.$d = parseDate(cfg) // 解析参数并返回date值
    this.$x = cfg.x || {}
    this.init()
  }

  init() {
    const { $d } = this
    this.$y = $d.getFullYear()
    this.$M = $d.getMonth()
    this.$D = $d.getDate()
    this.$W = $d.getDay()
    this.$H = $d.getHours()
    this.$m = $d.getMinutes()
    this.$s = $d.getSeconds()
    this.$ms = $d.getMilliseconds()
  }
  ...
}

构造函数中将语言方式赋值给$L,调用parse方法解析cfg参数,具体可见代码注释。

init方法中就是解构出解析完存储的date,调用JavaScript的Date原生方法来获取年,月,日等参数。

接下来就是构造函数内各个API的代码。

下一篇 : DayJs源码(四)Dayjs类中API

相关文章

  • DayJs源码(三)Dayjs类初始化

    看完了dayjs函数,接下来就看 Dayjs类。 先来看类初始化部分 构造函数中将语言方式赋值给$L,调用pars...

  • DayJs源码(四)Dayjs类中API

    Dayjs中的API被定义在Dayjs类中,因为有很多,所以这里将挑选部分来记录。 • isValid() 验证D...

  • react 简单的日期格式转换

    引用 : import dayjs from 'dayjs'; 使用: dayjs().format('YYYY-...

  • DayJs源码(二)Dayjs函数

    引入文件 进入index.js文件后,首先代码引入constant.js(定义了代码常量),local文件夹中en...

  • DayJs源码(五)Dayjs插件

    在DayJS中存在许多方法需要结合插件使用的例子。在DayJS中是怎样实现插件功能呢? 首先,dayJS注册插件方...

  • 插件dayjs

    官网地址https://dayjs.fenxianglu.cn/[https://dayjs.fenxianglu...

  • dayJs时间格式化库

    dayJs类似于momentJs库,但是dayJs用起来更方便简单

  • 根据时间段检索列表数据

    基于dayjs实现

  • dayjs

    获取上周周一、周日日期 获取本周周一、周日日期 api 开头时间 返回当前时间的开头时间的 Dayjs() 对象,...

  • dayjs

    API Dayjs 并没有改变或覆盖 Javascript 原生的 Date.prototype, 而是创造了一个...

网友评论

      本文标题:DayJs源码(三)Dayjs类初始化

      本文链接:https://www.haomeiwen.com/subject/iebnrltx.html