dayjs使用筆記
前言
最近因為APP資料處理速度太慢,其中發現一個部分的速度影響是因為parsing時間字串,所以做了時間轉換工具的遷徙,原本用moment到dayjs,因看dayjs使用上與moment接近。在模擬器上跑parsing時間字串的時間至少有2倍的速度提升,實機上則有更大幅度的速度提升。更多的優點是它核心容量很小,可以提高載入速度。
安裝
yarn add dayjs
dayjs基本用法
let m = dayjs('時間字串')
之前用moment是let m = new moment('時間字串')
確認是dayjs物件
m instanceof dayjs // 這個寫法在早期的dayjs沒支援
取用年月日時分秒
- 秒鐘 m.second(), // 0-59
- 分鐘 m.minute(), // 0-59
- 小時 m.hour(), // 0-23
- 日期 m.date(), // 1-31
- 月份 m.month(), // 0-11
- 年分 m.year(), // e.g. 2020
比較時間
相同時間 m1.isSame(m2, 可略的比較時間單位)
時間在後面 m1.isAfter(m2, 可略的比較時間單位) 反之用isBefore
計算時間差 m1.diff(m2, 可略的比較時間單位)
可略的比較時間單位有'day','hour','minute'等等
格式化成字串
m.format() // 相當於 m.format("YYYY-MM-DDTHH:mm:ssZ")
m.format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]')
在format內用[]可保留使用的字元不被轉換成時間數字,上面的輸出就會是'YYYYescape 2019-01-25T00:00:00-02:00Z'
額外模組
dayjs.extend(require('dayjs/plugin/advancedFormat'));
dayjs.extend(require('dayjs/plugin/updateLocale'));
dayjs.updateLocale('zh-tw', require('dayjs/locale/zh-tw'));
dayjs.extend(require('dayjs/plugin/utc'));
上面的程式作用
1. 引用advancedFormat是為了要用表示小時1-24(kk),一般的小時是0-23(HH)
2. 引用locale是為了要用中文的星期一,星期二,星期三
m.locale("zh-tw").format("M/D(dd)") // 例如2021/2/18會得到 2/18(四)
3. 引用utc則是為了要調整parsing時間字串的時區,例如:
dayjs('時間字串').utcOffset(480)//可調整成+8時區
也可以用utcOffset(8), 在dayjs說明文件有提到-16~+16會被當作時區的幾小時, 其他才會當成時區的分鐘設定
留言