Day.js 是一個輕量的 JAVAScript 時間日期處理庫。與 Moment.js 的 API 設計保持一致,隨著moment的包逐漸變大,官方已經決定未來停止維護相關moment.js庫,并且官網也推薦使用dayjs庫,因為它有很多優勢。
其主要特性如下:
- 與 Moment.js 相同的 API 和用法
- 不可變數據(Immutable)
- 支持鏈式操作(Chainable)
- 只有 2kb 大小(一些高級用法以擴展的形式存在,可按需加載)
- 全瀏覽器兼容
- 強大的國際化支持(I18n)
官網:https://day.js.org/en
Github:https://github.com/iamkun/dayjs
<!-- more -->
1. 安裝
1.1. 下載
下載地址:https://github.com/iamkun/dayjs/releases
<script src="path/to/dayjs/dayjs.min.js"></script>
<script>
dayjs().format()</script>
1.2. CDN
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>
<script>dayjs().format()</script>
1.3. Node.JS
npm install dayjs --save
var dayjs = require('dayjs')
//import dayjs from 'dayjs' // ES 2015
dayjs().format()
1.4. TypeScript
npm install dayjs --save
import * as dayjs from 'dayjs'
dayjs().format()
更多見官方文檔:https://day.js.org/docs/en/installation/typescript
2. API
2.1. 解析
Day.js 并沒有改變或覆蓋 JavaScript 原生的 Date.prototype, 而是創造了一個全新的包含 Javascript Date 的 Day.js 對象,可以直接使用 dayjs() 來調用。
Day.js 對象是不可變的, 所有的 API 操作都將返回一個新的 Day.js 對象。
// 返回包含當前日期和時間的 Day.js 對象
// 什么都不傳,相當于 dayjs(new Date())
let now = dayjs();
// 傳入一個標準的 ISO 8601 時間字符串
// https://en.wikipedia.org/wiki/ISO_8601
let date = dayjs('2020-06-01');
// 傳入一個 Unix 時間戳 (13位)
let date = dayjs(1591149248030);
// 傳入一個 Javascript Date 對象
let date = dayjs(new Date(2020, 6, 1));
// 因為 Day.js 對象是不可變的,可使用如下方法獲取一個對象拷貝
let date1 = date.clone(); // 方法一:在一個 Day.js 對象上使用 clone 函數
let date2 = dayjs(date); // 方法二:傳入一個 Day.js 對象
// 檢查當前 Day.js 對象是否是有效日期時間
if (dayjs().isValid()) {
// 有效
} else {
// 無效
}
2.2. 獲取和設置
// 獲取,返回 number 類型的值
dayjs().year(); // 年 ==> dayjs().get('year')
dayjs().month(); // 月 ==> dayjs().get('month')
dayjs().date(); // 日 ==> dayjs().get('date')
dayjs().hour(); // 時 ==> dayjs().get('hour')
dayjs().minute(); // 分 ==> dayjs().get('minute')
dayjs().second(); // 秒 ==> dayjs().get('second')
dayjs().millisecond(); // 毫秒 ==> dayjs().get('millisecond')
dayjs().day(); // 本周的第幾天 ==> dayjs().get('day')
// 設置,單位對應的值大小寫不敏感
dayjs().set('month', 3);
dayjs().set('second', 30);
2.3. 操作
// 增加
dayjs().add(7, 'day'); // 增加 7 天
// 減少
dayjs().subtract(2, 'month'); // 減少 2 個月
// 開頭
dayjs().startOf('month'); // 當月第一天
// 末尾
dayjs().endOf('year'); // 當年最后一天
2.4. 顯示
// 格式化
dayjs().format(); // 默認格式,如:2020-06-03T20:06:13+08:00
dayjs().format("YYYY-MM-DD HH:mm:ss"); // 指定格式 2020-06-03 20:07:12
// 獲取兩個 Day.js 對象的時間差,默認毫秒,可指定單位
dayjs('2020').diff(dayjs('1998')); // 694224000000
dayjs('2020').diff(dayjs('1998'), 'year'); // 22
// 時間戳
dayjs().valueOf(); // 毫秒
dayjs().unix(); // 秒
// 天數
dayjs('2020-07').daysInMonth(); // 31
// 原生 Date 對象
dayjs().toDate(); // Wed Jun 03 2020 20:13:40 GMT+0800 (China Standard Time)
// 返回 ISO 8601 格式的字符串
dayjs().toJSON(); // "2020-06-03T12:15:54.635Z"
dayjs().toISOString(); // "2020-06-03T12:16:48.199Z"
2.5. 查詢
// 檢查一個日期是否在另一個日期之前
dayjs('2020-06-03').isBefore(dayjs('2020-05-03')); // false
// 檢查一個日期是否在另一個日期之后dayjs('2020-06-03').isAfter(dayjs('2020-05-03')); // true
// 檢查兩個日期是否相同dayjs('2020-06-03').isSame(dayjs('2020-06-03')); // true