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沒支援

取用年月日時分秒

  1. 秒鐘 m.second(), // 0-59
  2. 分鐘 m.minute(), // 0-59
  3. 小時 m.hour(), // 0-23
  4. 日期 m.date(), // 1-31
  5. 月份 m.month(), // 0-11
  6. 年分 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有分模組,來降低整體套件的容量,我這裡介紹列出用到的部分
import dayjs from 'dayjs';
import pluginExtFmt from 'dayjs/plugin/advancedFormat'// format date with 'kk'
import pluginSetLocale from 'dayjs/plugin/updateLocale'// utcOffset, utc
import LocaleTW from 'dayjs/locale/zh-tw'// chinese weekday with 'dd'
import pluginUTC from 'dayjs/plugin/utc';

dayjs.extend(pluginExtFmt);
dayjs.extend(pluginSetLocale);
dayjs.updateLocale('zh-tw'LocaleTW);
dayjs.extend(pluginUTC);


2021-09-16補充:如果你用Node.js環境若無法用import,可改require

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會被當作時區的幾小時, 其他才會當成時區的分鐘設定


留言