深入了解dayjs官網

Day.js是一個輕量級的 JavaScript 時間庫,具有和 moment.js 一樣的 API ,但卻沒有 1.5MB 大小的尺寸。 本文將以Day.js官網為中心,對Day.js的使用、特點、插件等方面進行詳細闡述。

一、Day.js特點

Day.js擁有和moment.js一樣的API,但同時Day.js在很多方面反而更加方便實用。比如,它一些很好用的API函數:

//獲取當天的起始時間
dayjs().startOf('day');

//計算兩個日期之間的天數
dayjs().diff(dayjs('2019-12-13'), 'day');

//獲取某月的天數
dayjs().daysInMonth();

Day.js內置了一些默認格式和解析器的實現,比如:’YYYY-MM-DD’、’YYYY/MM/DD’,統一了各個API對日期格式的要求,解決了傳參、轉換和輸出的問題。

Day.js支持鏈式語法,即一個Day.js實例調用完一個方法之後,返回的仍然是一個Day.js實例,方便鏈式調用。

Day.js的API擴展性也很強,可以對格式進行隨意定製。

二、Day.js的使用與語法

引入Day.js庫之後,創建一個dayjs實例,並在其中傳入日期或時間字符:

const dayjs = require('dayjs');
dayjs("2019-12-13")

// OR
dayjs(new Date())

// OR
dayjs(1579715221832)

Day.js可以解析ISO8601,RFC2822和Unix Timestamp等格式:

dayjs('2019-01-01')                // 日期
dayjs().year(2019).month(0).date(1) // 日期
dayjs('2019')                      // 年份
dayjs('2019-001')                  // ISOWeek
dayjs('2019-W01-1')                // ISOWeek
dayjs('2019-05-06T03:04:05')       // 時間戳
dayjs('20190506')                  // 自定義

最後,Day.js還支持格式化輸出,比如:

dayjs().format()                     // 默認格式(2022-02-14T20:30:54+08:00)
dayjs().format('YYYY-MM-DD')          // '2019-01-01'
dayjs().format('h:mm:ss A')           // '12:00:00 PM'(採用12小時制)
dayjs().format('[Today is] DDDo [day of the year]')   //'Today is 1st day of the year'

三、Day.js插件——duration & utc

Day.js還有一些像moment.js一樣的插件。其中duration插件可以方便地計算兩個時間之間的差值,如下所示:

// 獲取兩個時間相差的毫秒數
const oneHour = dayjs.duration(1, "hour").asMilliseconds();
const duration = dayjs('2022-02-14 21:30:00').diff(dayjs('2022-02-14 20:30:00'));   // 3600000

// 獲取兩個時間相差的具體時間(小時/分鐘)
const diffHour = dayjs.duration(duration).asHours();  // 1
const diffMinute = dayjs.duration(duration).asMinutes(); // 60

而utc插件則可以方便地進行UTC時間與本地時間的轉換,如下所示:

dayjs.utc('2019-01-01T00:00:00Z').local().format()   // UTC時間 -> 本地時間

四、Day.js插件——calendar & relativeTime

Day.js的calendar插件可以將日期轉換成一些常用的表示形式,如下所示:

dayjs().calendar(null, {
  // 如果與當前時刻相差不超過3天以上,則顯示在具體的星期幾
  sameDay: '[Today]',
  nextDay: '[Tomorrow]',
  lastDay: '[Yesterday]',
  nextWeek: 'dddd',
  lastWeek: 'dddd',
  sameElse: 'YYYY/MM/DD'
});

而relativeTime插件也可將日期根據時間差值轉換成一些表示形式,方便日常使用:

// 獲取當前日期就是多久之前
dayjs().startOf('day').fromNow();    // 'a day ago'

// 獲取未來某一日期與現在的時間相差多少
dayjs('2019-06-08').fromNow();      // '6 months ago'

// 獲取未來某一日期到現在的時間差值
dayjs('2019-06-08').toNow();      // 'in 6 months'

五、Day.js插件——updateLocale

Day.js的locale插件可以對本地語言格式和解析進行擴展。例如下面的代碼可以擴展中文支持,使得中國的用戶可以更方便的使用Day.js:

// 擴展中文語言包
dayjs.locale('zh-cn', {
  weekdays: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
  monthsShort: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'],
});

這樣,當我們使用dayjs.format(‘e’)的時候,輸出的就是’周三’而不是默認的’Wed’。

六、Day.js插件——businessDay

Day.js的businessDay插件可以方便地獲取下一個工作日/下一個周末。使用businessDay插件需要首先引入businessDay插件和businessTime插件(該插件用於指定一個起始時間點,它可以告訴我們當天的工作時間),具體的可以查看Day.js官網的文檔。

const dayjs = require('dayjs');
const businessDay = require('dayjs/plugin/businessDay');
const businessTime = require('dayjs/plugin/businessTime');
dayjs.extend(businessDay);
dayjs.extend(businessTime);

// 找到下一個工作日
dayjs().nextBusinessDay();

// 找到下一個周末
dayjs().nextBusinessWeekend();

七、Day.js的優劣對比分析

Day.js和moment.js都是非常成熟的時間庫,而Day.js又有着類似於moment.js的API,使用方法上二者並沒有太大的不同。但經過對比之後,Day.js更加輕量化、易用性強,而且自帶TypeScript支持,使得我們在編程過程中可以更多地專註於業務邏輯的構建和開發效率的提升。

八、總結

Day.js作為輕量級的 JavaScript 時間庫,具有和moment.js一樣的 API,但具有較小的尺寸,在實際應用中非常方便實用。Day.js在編寫過程中的使用方法、特點和插件等方面可以滿足不同開發者的需求。相信隨着Day.js在前端開發中的更多應用,會為廣大用戶帶來更多的便利。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/306108.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 12:00
下一篇 2025-01-02 12:00

相關推薦

  • Python官網中文版:解決你的編程問題

    Python是一種高級編程語言,它可以用於Web開發、科學計算、人工智能等領域。Python官網中文版提供了全面的資源和教程,可以幫助你入門學習和進一步提高編程技能。 一、Pyth…

    編程 2025-04-29
  • 國家數字圖書館官網打不開怎麼辦?

    如果你發現無法訪問國家數字圖書館官網,可能是以下幾個方面導致的。 一、網絡連接問題 首先,我們要確定自己的網絡存在沒有問題。可以通過瀏覽器訪問其他網站來檢測網絡連接是否正常。 二、…

    編程 2025-04-29
  • Python中文版下載官網的完整指南

    Python是一種廣泛使用的編程語言,具有簡潔、易讀易寫等特點。Python中文版下載官網是Python學習和使用過程中的重要資源,本文將從多個方面對Python中文版下載官網進行…

    編程 2025-04-29
  • 尚硅谷官網地址用法介紹

    尚硅谷是國內一家領先的技術培訓機構,提供了眾多IT職業的培訓,包括Java、Python、大數據、前端、人工智能等方向。其官網地址為http://www.atguigu.com/。…

    編程 2025-04-29
  • MLflow官網用法介紹

    本文將從多個方面詳細闡述MLflow官網的功能和使用方法,讓讀者在學習和使用MLflow過程中更加便利。 一、介紹 MLflow是一個開源的機器學習平台,由Databricks團隊…

    編程 2025-04-29
  • Python模塊庫大全官網

    Python模塊庫大全官網是一個全面收錄Python模塊庫的網站,開發者可以在該網站中找到自己需要的模塊庫、文檔、教程等資源,提高開發效率,降低開發成本。本文將從多個方面對Pyth…

    編程 2025-04-27
  • 老虎證券app官網下載

    老虎證券是一家提供在線股票交易服務的綜合性經紀商。老虎證券app是老虎證券的官方移動應用,它可以為投資者提供包括股票、期貨、外匯和數字貨幣的多種交易服務。本文將介紹老虎證券app的…

    編程 2025-04-27
  • 保利票務官網的開發實現

    保利票務官網是一個擁有強大性能和優秀用戶體驗的在線售票平台,其前端由 HTML、CSS 和 JavaScript 組成,後台使用 PHP 和 MySQL 進行數據存儲和管理。本文將…

    編程 2025-04-27
  • OpenSwan 官網用法介紹

    OpenSwan 是一種開源 IPsec 協議,可以用於創建安全的虛擬專用網絡。 一、OpenSwan 概述 OpenSwan 是一個成熟的、被廣泛使用的開源項目。它支持 IPSE…

    編程 2025-04-27
  • 深入解析Vue3 defineExpose

    Vue 3在開發過程中引入了新的API `defineExpose`。在以前的版本中,我們經常使用 `$attrs` 和` $listeners` 實現父組件與子組件之間的通信,但…

    編程 2025-04-25

發表回復

登錄後才能評論