這個日期處理工具如此強大,卻輕到飛起!

語言: CN / TW / HK

「這是我參與11月更文挑戰的第2天,活動詳情檢視:2021最後一次更文挑戰

大家好,我是前端實驗室的大師兄!

一直以來,處理時間和日期的JavaScript庫,選用的都是Momment.js。它的API清晰簡單,使用方便靈巧,功能還特別齊全。

大師兄是Moment.js的重度使用者。凡是遇到時間和日期的操作,就把Moment.js引用上。 直到有天我發現載入的moment.min.js大小有19.8KB,而我的頁面整體大小還不到5KB,Moment.js給我的吸引力頓減。這Moment.js體積是忒大了一點。

於是就在開源社群找到了兩個精簡的替代方案:Day.jsMiment

Day.js

Day.js是一個極簡的JavaScript庫,可以為現代瀏覽器解析、驗證、操作和顯示日期和時間。 Day.js本身就是對標Moment.js進行開發的,極力相容了Moment.js的API。官網上有一句話If you use Moment.js, you already know how to use Day.js.

我們來對比下Day.jsMoment.js的使用。

//解析和顯示 dayjs().format(); moment().format(); ​ //格式化 dayjs('2021-11-18', 'YYYY-MM-DD') moment('2021-11-18', 'YYYY-MM-DD') ​ //依賴原生 Javascript Date 物件 var d = new Date(2018, 8, 18); var day = dayjs(d); var m_day = moment(d); ​ //取值 dayjs().year() moment().year() ​ //操作 dayjs('2020-01-25').add(1, 'day').subtract(1, 'year').year(2009); moment('2020-01-25').add(7, 'days').subtract(1, 'months').year(2009);

Day.js的API和Moment.js幾乎一模一樣,學習成本和遷移成本非常低。API呼叫語句絕大部分情況下可以一字不改。 Day.js的大小是多少呢?2KB。再想想Moment.js的大小,你說香不香。

Miment

Miment("Mini Moment")也是一個輕量級的時間庫,打包壓縮後體積更小:大約 1KB 作者團隊保留了Moment.js中核心方法,用於應對普通場景下的需求,從而有個這個精簡版的Moment

MimentAPI分為3大類

第一類,返回其他物件的,比如format,返回的是字串,json返回的是一個json物件。

miment().format('YYYY') // 2021 miment().json() //{"year": 2021,"month": 11,"date": 16,"hour": 16,"minute": 26,"second": 45,"day": 2,"milliSecond": 887}

第二類,返回Miment物件。你可以在調完一個API後面繼續呼叫另一個API,也就是我們所說的鏈式呼叫。

miment().add(1, 'YYYY').add(2, 'MM').add(-3, 'DD')

需要注意的是,不能把第一類和第二類API混用。當你調完第一類方法後,返回的物件型別不是Miment物件,後面就不支援鏈式呼叫了。

第三類從Date物件繼承的,也就是說Date物件有的方法,Miment也同樣有。

miment().getFullYear() //2021 miment().getDate() //16

如果你想要Moment.js的若干核心能力但又不希望包體積膨脹時,歡迎嘗試Miment

結語

是不是我們可以完全用Day.jsMiment替代Moment.js呢?

不是。其一,框架或JavaScript庫本已經依賴了Moment.js,沒必要用Day.jsMiment進行替代了。 其二,當需要更完善的API操作時,Moment.js畢竟功能更齊全。Miment只包含了核心功能。

除開上面兩種情況,在時間操作場景下,如果Day.jsMiment更符合使用要求就可以進行替代了。

尤其對於非SSR的場合,想要精簡首屏渲染速度,使用Day.jsMiment真的是非常有吸引力。

進了前端門,便是一家人

原創不易,點贊、留言、分享就是大師兄寫下去的動力!