本文整理自 Monent.js 官方英文公告 momentjs.com/docs/#/-pro…git
Moment.js 宣布中止开发,进入维护状态。github
这是一个大而全的时间日期库,极大方便了咱们在 JavaScript 中计算时间和日期,每周下载量超过 1200 万,已成功用于数百万个项目中。浏览器
可是,做为一个诞生于 2011 年的元老级明星项目,以如今的眼光来看 Moment.js 并不是天衣无缝,官方总结了两大问题:markdown
Moment 对象是可变对象(mutable),简单点说,任什么时候间上的加减等计算都改变了其自己。这种设计让代码变的十分不可控,并且很容易带来各类隐蔽且难以调试的 bug。以致于咱们在每步修改以前,都要先调用 .clone
克隆一次才能放心操做。工具
由于 Momnet.js 将所有的功能和全部支持的语言都打到一个包里,包的大小也是到了 280.9 kB 这样一个夸张的数字,并且对于 Tree shaking 无效。若是要使用时区相关的功能,包体积更是有 467.6 kB 的大小。简单点说,咱们可能只须要一个 .format
格式化时间的方法,用户就须要加载数百 kB 的库,这是十分不划算的。oop
最新版本的 Chrome 开发者工具也开始建议用户更换 Moment.js 为同类更小的库。 spa
如今,Moment.js 中止开发了,那咱们接下来该用什么呢?设计
官方给了 3 种替代方案:调试
对于一些简单的时间处理需求,其实 JavaScript 自带的 Date
和 Intl
对象彻底能够知足。强大的 Intl
对象能够展现不一样时区不一样语言的时间日期格式,在多数现代浏览器上已经有很好的支持。code
也许从此的某一天,咱们不再须要使用任何库,被看做是将来的全新内置的时间日期方案 Temporal 很值得期待。这是一个 JS 语言内置的从新设计的时间和日期 API,如今能够经过实验性的 polyfill 来尝试 Temporal,但离生产上大规模可用还有很长的路要走。
官方推荐了 Luxon,Day.js,date-fns 等更先进设计更优秀的时间日期库。相比之下可能 Day.js 是最值得尝试的一个。
官方推荐语:Day.js 被设计为 Moment.js 的极简替代品,拥有几乎同样的 API。若是你习惯使用 Moment 的 API 并但愿快速入门,请考虑使用 Day.js。
上面说到了官方总结的 Moment.js 的两点设计缺陷,可变对象下降了代码的维护性,过大的包体积影响了影响了整个项目的加载速度。
而将近 3 万 Github Star 的 Day.js 的设计理念与这份总结不谋而合。在保持了优秀的 API 设计不变的同时,引入不可变对象(immutable)减小了开发时所需的心智成本,同时简化逻辑使整个包体积仅有 2 kB 大小。
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');
复制代码
感谢 Moment.js 前辈的付出,让咱们的开发体验变的更好,期待接过接力棒的 Day.js 能让时间日期处理不再是难题 💖,也期待将来 JavaScript 内置的时间日期新方案能让咱们使用 Vanilla js 解决一切问题。