Moment.js 是一个大而全的 JS 时间库,很大地方便了我们处理日期和时间。但是 Moment.js 太重了(200k+ with locals),可能一般项目也只使用到了她几个常用的 API。虽然社区也有几个轻量的时间库,要想迁移过去又会增加新的学习和迁移成本。
如果能有一个和 Moment.js 一样语法,一样功能,又轻量的库该多好!
Day.js 是一个轻量的 JavaScript 时间日期处理库,和 Moment.js 的 API 设计保持完全一样. 如果你曾经用过 Moment.js, 那么你已经知道如何使用 Day.js
Day.js
基本用法如下,相同的 API,相同的链式操作。
dayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss');
Day.js 虽然仅有 2kb 大小,但功能上也包含了时间处理的全部常用方法。
喜欢可以给个💖star💖鼓励一下吗 https://github.com/xx45/dayjs
如果您的项目里没有其他国家语言本地化的需求,那想缩小打包体积,提升开发体验只需要 replace(/moment/g, 'dayjs')
全局替换一下。就能从 Moment.js + locals
200kb 减小成 dayjs
2kb 的体积。所有的 API 调用都保持不变,无需修改。
来感受一下 Dayjs
的语法吧,是不是很看起来亲切呢 😋 (没错 这就是 moment 的语法嘛)
dayjs() // 当前时间
dayjs('1995-12-25') // 1995-12-25
dayjs(Date.now() - 24 * 60 * 60 * 1000) // 昨天
dayjs().format('YYYY 年 MM 月 DD 日 HH:mm:ss') // 2018 年 08 月 08 日 00:00:00
dayjs().format('[YYYY]') // "[2018]"。[] 里的会原样输出。
dayjs().add(7, 'days') // 之后的第 7 天
dayjs().subtract(1, 'months') // 上个月
dayjs().startOf('months') // 获取一月初
dayjs().endOf('year') // 获取一年年末
dayjs('2010-10-20').isBefore('2010-10-21') // 早于
dayjs('2010-10-20').isAfter('2010-10-19') // 晚于
dayjs().isLeapYear() // 闰年
欢迎来 issue 和 pr 哦 https://github.com/xx45/dayjs
1
zazzaz 2018-04-27 13:55:43 +08:00
我在今天 github trending 排行榜看到大佬的项目了 4000star 很厉害呀 喜欢这种小而美的库
|
2
iamkun OP 小而美 我喜欢这个说法 😄
|
3
sunjourney 2018-04-27 14:51:52 +08:00
你是 immutable 的,moment 是 mutable 的,replace(/moment/g, 'dayjs') ,怕是要出篓子哦。
|
4
sunjourney 2018-04-27 14:53:59 +08:00
其实如果不能通过 moment 的 test cases,`replace(/moment/g, 'dayjs') ` 就最好不要这样介绍,免得有人出 bug 了怪库
|
5
iamkun OP 恩 @sunjourney 你说的对 ,下次会更严谨一点。用 moment 时为了避免 bug 一般会 clone 出来一个再操作(假装 mutable),所以我也对应实现了一个 clone 的 API
|
6
wxsm 2018-04-27 14:59:48 +08:00
支持一下
|
7
airyland 2018-04-27 15:00:05 +08:00
赞,但是越多人使用就越可能提出更多的需求和问题,希望能尽量保持体积。
|
8
sunjourney 2018-04-27 15:07:00 +08:00
@iamkun #5 主要鬼知道有没有人在利用 mutable 编程。。。
|
9
kohos 2018-04-27 15:53:13 +08:00
支持,momentjs 确实太大了点,以后开发换 dayjs 了
|
10
zazzaz 2018-04-27 16:51:53 +08:00
@sunjourney 写 moment 必须要每一步都调用 clone 呀 不然很有可能出现各种莫名其妙的 bug
|
12
airyland 2018-04-27 18:00:41 +08:00 1
@iamkun #11 因为是组件库,都是按需加载,新需求一般也不会让单个组件体积膨胀,所以其实没有这个问题。。工具库像 lodash 是可以按需加载单个函数的,或许你可以保持核心小,其他扩展作为附加文件额外加载,因为大多数时候用户只是需要核心库。
|
15
FEDT 2018-04-27 22:41:31 +08:00 via iPhone
赞
|
17
iamkun OP @yuanfnadi 谢谢反馈 ,github 看到你的 issue 了,预计明天发的版本会解决。如果比较急可以传入之前先`replace(/-/g, '/')` 即可
|
18
airyland 2018-04-27 23:55:06 +08:00
@zazzaz #14 一开始上 Github Trending 还挺兴奋的,但是过了 5k 后就没感觉了,再过了 10k 后就会感觉增长缓慢所以不会再去关注 star 数了,实际上维护也挺花精力的。
|
19
SourceMan 2018-04-27 23:55:55 +08:00 via iPhone
已经用 date-fns 了。。
|
20
phoenixlzx 2018-04-30 14:23:22 +08:00
|
21
iamkun OP @phoenixlzx 哇 TJ 大神吗? 赶快去看看
|
22
zazzaz 2018-05-01 20:56:58 +08:00
@phoenixlzx 火前留名 tj star 的项目 过一万星星估计已经不远了
|
23
zj9495 2018-05-09 12:02:47 +08:00
不能处理 unix 时间么
https://s1.ax1x.com/2018/05/09/CdOtpT.png |
26
WildCat 2018-05-11 23:57:52 +08:00
楼主在 Brighton ?
|
27
asahui 2018-06-19 23:36:32 +08:00 via iPhone
能介绍一下如何做到比 moment 小这么多吗,精简了哪些地方
|