day.js

Day.js - 一套輕量級的時間處理套件

陳柏成 Paul Chen 2020/05/26 09:52:33
14888

Day.js 介紹


Day.js 是一套非常輕量的時間處理套件,具有以下特點。

 

1. 很輕量

如果只需要簡單功能,不使用套件的話,核心包僅有 2KB。

 

2. 易上手

Day.js 設計非常輕巧,使用簡單,且與知名時間處理套件 moment 的使用方式幾乎相同,如果曾使用過 moment,那上手 Day.js 會非常快。

 

3. 不可變

Day.js 所有方法都會返回全新 Dayjs 物件,這能避免修改到原始資料,減少 bug 產生。

 

4. 多語系

Day.js 支援多語系。

 

安裝方式

Day.js 可執行於瀏覽器及 Node 環境。

 

1. Node

// 首先執行指令安裝 Day.js
npm install dayjs --save
// 引入 Day.js
const dayjs = require('dayjs')

// 或使用 ES6 import 方式引入 Day.js
import dayjs from 'dayjs'

// 使用 Day.js
dayjs().format()

 

2. CDN

<!-- CDN 引入 Day.js -->
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>

<script>
  // 使用 Day.js
  dayjs().format()
</script>

 

使用方式

// 取得目前時間
const now = dayjs() // 等同 dayjs(new Date())

// 可傳入 Data 物件取得目前時間
const now = dayjs(new Date())

// 取得指定時間
const date = new Date(2018, 8, 18)

// 解析日期
const date = dayjs('01-10-2020', 'MM-DD-YYYY)

// 解析日期 - 嚴格模式,包含符號
const data = dayjs('01-10-2020', 'MM-DD-YYYY, true)

 

取得 UTC 時間

dayjs.extend(utc)

// 取得本地時間
dayjs().format() //2019-03-06T08:00:00+08:00

// 取得 UTC 時間
dayjs.utc().format() // 2019-03-06T00:00:00Z

 

取得新的實例

const a = dayjs()
const b = a.clone()

 

驗證返回的時間是否正確

dayjs(null).isValid() // false
dayjs().isValid() // true

 

GET 或 SET

// 取得毫秒
dayjs().millisecond()
// 設定毫秒,如傳入數字在 0-999 範圍外,會進位到秒。
dayjs().millisecond(100)

// 取得秒
dayjs().seconds()
// 設定秒,如傳入數字在 0-59 範圍外,會進位到分鐘。
dayjs().seconds(30)


// 取得分鐘
dayjs().minute()
// 設定秒,如傳入數字在 0-59 範圍外,會進位到小時。
dayjs().minute(30)

// 取得小時
dayjs().hour()
// 設定小時,如傳入數字在 0-23 範圍外,會進位到天數。
dayjs().hour(12)

// 取得天數
dayjs().date()
// 設定天數,如傳入數字在 0-月份天數 範圍外,會進位到月份。
dayjs().date(1)

// 取得星期(幾)
dayjs().day()
// 設定星期(幾),如傳入數字在 0-6 範圍外,會進位到週。
dayjs().day(0)

// 取得月份
dayjs().month()
// 設定月份,如傳入數字在 0-11 範圍外,會進位到年。
dayjs().month(6)

// 取得年份
dayjs().year()
// 設定年份
dayjs().year(2020)

 

顯示

// 默認返回 ISO 8601 時間字串,例:'2020-05-15T10:59:34+08:00'
dayjs().format() 

// 返回 'YYYYescape 2019-01-25T00:00:00-02:00Z'
dayjs('2019-01-25').format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]') 

// 返回 '25/01/2019'
dayjs('2019-01-25').format('DD/MM/YYYY') 

請參考:格式化規則列表

 

套件使用

Day.js 核心包只包含常用功能,要使用其他功能需引入相關套件

 

可使用套件如下

套件名稱 / 連結 說明
AdvancedFormat

擴展 dayjs(時間).format() API

格式化模板。

BuddhistEra

擴展 dayjs(時間).format() API

支持 佛曆 格式化。

Calendar

新增 dayjs(時間).calendar() API

取得日曆時間。

CustomParseFormat 擴展 dayjs 自定義時間格式。
DayOfYear

新增 dayjs(時間).dayOfYear() API

取得或設定年份的第幾天。

Duraction

新增 dayjs.duration(時間) API

取得時間長度。

IsBetween

新增 dayjs(時間).isBetween(開始, 結束, 比較條件, 包含條件) API

取得指定日期是否介於某個範圍日期之間的 boolean 值。

IsLeapYear

新增 dayjs(時間).isLeapYear() API

取得指定日期是否為閏年的 boolean 值。

IsSameOrAfter

新增 dayjs(時間).isSameOrAfter(比較時間) API

取得 時間 是否跟 比較時間 相等或較晚的 boolean 值。

IsSameOrBefore

新增 dayjs(時間).isSameOrBefore(比較時間) API

取得 時間 是否跟 比較時間 相等或較早的 boolean 值。

IsToday

新增 dayjs(時間).isToday() API

取得 時間 是否為 今天 的 boolean 值。

IsTomorrow

新增 dayjs(時間).isTomorrow() API

取得 時間 是否為 明天 的 boolean 值。

IsYesterday

新增 dayjs(時間).isYesterday() API

取得 時間 是否為 昨天 的 boolean 值。

IsoWeek

新增 dayjs(時間).isoWeek() API

取得或設定年度 ISO 週數。

 

新增 dayjs(時間).isoWeekday() API

取得或設定一週的 ISO 週。

 

新增 dayjs(時間).isoWeekYear() API

取得 IOS 年。

IsoWeeksInYear

新增 dayjs(時間).isoWeeksInYear() API

取得一年中有幾週。

LocaleDate

新增 dayjs(時間).localeDate() API

提供本地化數據。

LocalizedFormat

新增 dayjs(時間).localizedFormat() API

擴展本地化日期格式化。

MinMax

新增 dayjs.max(...dayjs 實例)、dayjs.min(...dayjs 物件) API

比較傳入的 dayjs 實例大小。

QuarterOfYear

新增 dayjs(時間).quarterOfYear() API

取得 時間 的季度。

RelativeTime

新增 dayjs().from()、dayjs().fromNow()、dayjs().to()、dayjs().toNow() API

返回相對時間。

ToArray

新增 dayjs(時間).toArray() API

返回包含 時間 資訊的陣列

ToObject

新增 dayjs(時間).toObject() API

返回包含 時間 資訊的 object

UpdateLocale

新增 dayjs.updateLocale() API

設定語系配置。

UTC

新增 dayjs(時間).utc() API

取得使用 UTC 解析或顯示時間的 dayjs 物件。

 

新增 dayjs(時間).local() API

取得使用本地時間的 dayjs 物件。

 

新增 dayjs(時間).isUTC() API

取得 時間 是否為 UTC 模式的 boolean 值。

WeekDay

新增 dayjs(時間).weekDay() API

取得當前語言的星期。

weekOfYear

新增 dayjs(時間).weekOfYear() API

取得或設置 時間 的週。

WeekYear

新增 dayjs(時間).WeekYear() API

取得或設置 時間 的年。

 

小結

Day.js 還有許多客製化及 i18n 的相關設定可以在官方說明中查看,如果專案需要做簡單的時間處理,不妨可以考慮使用 Day.js 這套輕量級的時間處理套件。

 

參考資料

Day.js 官網

 

陳柏成 Paul Chen