⏰ Moment.js 宣布中止开发,如今该用什么?

本文整理自 Monent.js 官方英文公告 momentjs.com/docs/#/-pro…git

Moment.js 宣布中止开发,进入维护状态。github

这是一个大而全的时间日期库,极大方便了咱们在 JavaScript 中计算时间和日期,每周下载量超过 1200 万,已成功用于数百万个项目中。浏览器

可是,做为一个诞生于 2011 年的元老级明星项目,以如今的眼光来看 Moment.js 并不是天衣无缝,官方总结了两大问题:markdown

1. 可变对象

Moment 对象是可变对象(mutable),简单点说,任什么时候间上的加减等计算都改变了其自己。这种设计让代码变的十分不可控,并且很容易带来各类隐蔽且难以调试的 bug。以致于咱们在每步修改以前,都要先调用 .clone 克隆一次才能放心操做。工具

2. 包体积过大

由于 Momnet.js 将所有的功能和全部支持的语言都打到一个包里,包的大小也是到了 280.9 kB 这样一个夸张的数字,并且对于 Tree shaking 无效。若是要使用时区相关的功能,包体积更是有 467.6 kB 的大小。简单点说,咱们可能只须要一个 .format 格式化时间的方法,用户就须要加载数百 kB 的库,这是十分不划算的。oop

最新版本的 Chrome 开发者工具也开始建议用户更换 Moment.js 为同类更小的库。 spa

如今,Moment.js 中止开发了,那咱们接下来该用什么呢?设计

官方给了 3 种替代方案:调试

1. 不使用库

对于一些简单的时间处理需求,其实 JavaScript 自带的 DateIntl 对象彻底能够知足。强大的 Intl 对象能够展现不一样时区不一样语言的时间日期格式,在多数现代浏览器上已经有很好的支持。code

2. Temporal

也许从此的某一天,咱们不再须要使用任何库,被看做是将来的全新内置的时间日期方案 Temporal 很值得期待。这是一个 JS 语言内置的从新设计的时间和日期 API,如今能够经过实验性的 polyfill 来尝试 Temporal,但离生产上大规模可用还有很长的路要走。

3. 其余替代库

官方推荐了 Luxon,Day.js,date-fns 等更先进设计更优秀的时间日期库。相比之下可能 Day.js 是最值得尝试的一个。

Day.js

官方推荐语:Day.js 被设计为 Moment.js 的极简替代品,拥有几乎同样的 API。若是你习惯使用 Moment 的 API 并但愿快速入门,请考虑使用 Day.js。

上面说到了官方总结的 Moment.js 的两点设计缺陷,可变对象下降了代码的维护性,过大的包体积影响了影响了整个项目的加载速度。

而将近 3 万 Github StarDay.js 的设计理念与这份总结不谋而合。在保持了优秀的 API 设计不变的同时,引入不可变对象(immutable)减小了开发时所需的心智成本,同时简化逻辑使整个包体积仅有 2 kB 大小。

github.com/iamkun/dayj…

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 相同的 API 和用法
  • 📦 仅 2kB 大小的微型库
  • 💪 不可变数据 (Immutable)
  • 🔥 支持链式操做 (Chainable)
  • 🌐 I18n 国际化
  • 👫 支持全球时区转换

感谢 Moment.js 前辈的付出,让咱们的开发体验变的更好,期待接过接力棒的 Day.js 能让时间日期处理不再是难题 💖,也期待将来 JavaScript 内置的时间日期新方案能让咱们使用 Vanilla js 解决一切问题。

相关文章
相关标签/搜索