這個日期處理工具如此強大,卻輕到飛起!
「這是我參與11月更文挑戰的第2天,活動詳情檢視:2021最後一次更文挑戰」
大家好,我是前端實驗室的大師兄!
一直以來,處理時間和日期的JavaScript庫,選用的都是Momment.js
。它的API清晰簡單,使用方便靈巧,功能還特別齊全。
大師兄是Moment.js
的重度使用者。凡是遇到時間和日期的操作,就把Moment.js
引用上。 直到有天我發現載入的moment.min.js大小有19.8KB,而我的頁面整體大小還不到5KB,Moment.js
給我的吸引力頓減。這Moment.js
體積是忒大了一點。
於是就在開源社群找到了兩個精簡的替代方案:Day.js
和Miment
。
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.js
和Moment.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。
Miment
API分為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.js
或Miment
替代Moment.js
呢?
不是。其一,框架或JavaScript庫本已經依賴了Moment.js
,沒必要用Day.js
或Miment
進行替代了。 其二,當需要更完善的API操作時,Moment.js
畢竟功能更齊全。Miment
只包含了核心功能。
除開上面兩種情況,在時間操作場景下,如果Day.js
和Miment
更符合使用要求就可以進行替代了。
尤其對於非SSR的場合,想要精簡首屏渲染速度,使用Day.js
或Miment
真的是非常有吸引力。
進了前端門,便是一家人
原創不易,點贊、留言、分享就是大師兄寫下去的動力!