本文整理自 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 解決一切問題。