开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 15天,点击查看活动详情
上一次掘金的征文活动,准确来说,应该是去年的最后一次掘金官方的征文活动,我没有参加那一次征文活动。距离上一次征文,好像有两三个月了,感觉时间过得有点漫长了,都快要忘记掘金的征文活动了。
现在掘金推出了新的一年的征文活动-掘金日新计划 · 2 月更文挑战,又要开始新的一年,新的一轮的征文挑战了。
征文挑战已经开始了,而我即将要参与这次征文活动,参与挑战,挑战自己。
提升系列
提升系列,我主要是想写一些平时工作上面,自己会用到的一些好的技巧或者方法。当然,这些技巧和方法是针对我自己的。
除此之外,还可能会写一些解决难点的方法。比如,遇到了某个难点,要通过什么方法来解决它?
正如它的名字一样--提升,通过学习一些好的技巧、方法,或者解决一些难题、难点,来提升我们的能力。
出这个提升系列,一方面,是提升自己的开发能力;另一方面,也希望这个提升系列,可以帮助到部分人,提升他们的开发能力。
在这个系列里,我能想到的或者实现方法,不一定是最好的。欢迎大家参与讨论。
前言
在上一篇文章提升系列:18.获取格式化时间区间-4-2里,主要是从dayjs的官网里找到代码仓库,然后下载dayjs的源码。
dayjs的源码下载好了,接下来,我们将查看一下dayjs的源码,看下第三方库-dayjs是怎么实现获取前面7天时间的功能。
dayjs
Day.js是一个极简的JavaScript库,可以为现代浏览器解析、验证、操作和显示日期和时间
这是dayjs官网上面的介绍,可以使用dayjs来进行日期、时间方面相关的操作。
查阅
我们到dayjs的仓库里,把源码下载下来。下载解压后,我们在vscode里,把代码打开。
我们查看scr目录,里面有一个index.js文件,这就是代码仓库的入口文件了。
在里面,也能看到我们使用dayjs一些方法,比如add,subtract,format方法等。
我们要查看的是subtract方法
subtract(number, string) {
return this.add(number * -1, string)
}
我们可以看到,它其实是调用了add方法。那查看一下add方法
add(number, units) {
number = Number(number) // eslint-disable-line no-param-reassign
const unit = Utils.p(units)
const instanceFactorySet = (n) => {
const d = dayjs(this)
return Utils.w(d.date(d.date() + Math.round(n * number)), this)
}
if (unit === C.M) {
return this.set(C.M, this.$M + number)
}
if (unit === C.Y) {
return this.set(C.Y, this.$y + number)
}
if (unit === C.D) {
return instanceFactorySet(1)
}
if (unit === C.W) {
return instanceFactorySet(7)
}
const step = {
[C.MIN]: C.MILLISECONDS_A_MINUTE,
[C.H]: C.MILLISECONDS_A_HOUR,
[C.S]: C.MILLISECONDS_A_SECOND
}[unit] || 1 // ms
const nextTimeStamp = this.$d.getTime() + (number * step)
return Utils.w(nextTimeStamp, this)
}
我们对代码进行一下分析:
- 先是对传递进来的参数number,调用Number方法,将其转化为数字
- 对传递进来的units参数,调用Utils.p来进行格式化处理。
- 声明instanceFactorySet函数,后面需要使用到
- 几个条件判断,如果满足条件,则调用对应方法处理,然后返回
- 如果上面几个条件都不满足,则再次计算时长时间
- 调用Utils.w方法处理时长,最后返回结果
代码先分析到这里,后面会对调用的方法再做进一步分析。
小结
本篇文章总结:
本小节,主要是查看了dayjs的源码。主要是查看了subtract和add两个方法的代码,并进行了分析。后续还会继续分析这些方法里调用到的其它的代码。
最后,放上自己比较喜欢的一句诗句:
千淘万漉虽辛苦,吹尽狂沙始到金 - 唐 刘禹锡《浪淘沙》