使用 date-fns 簡(jiǎn)化日期操作
Sep 03, 2023 am 10:29 AM日期運(yùn)算是 JavaScript 中的常見任務(wù),原生 Date
物件提供了一些基本功能。但是,處理日期可能很複雜且容易出錯(cuò),且 Date
缺乏執(zhí)行這些常見任務(wù)所需的功能。為了使日期處理變得更容易、更可靠,開發(fā)人員必須依賴第三方程式庫(kù)。 JavaScript 生態(tài)系統(tǒng)中有很多可用的,但 date-fns 脫穎而出,成為事實(shí)上的標(biāo)準(zhǔn)。它是一個(gè)用於解析、格式化和操作日期的輕量級(jí)實(shí)用程式庫(kù)。
在本教程中,我們將探索使用 date-fns 的基礎(chǔ)知識(shí),並涵蓋處理日期的最常用函數(shù)。最後,您將深入了解如何將 date-fns 合併到 JavaScript 專案中以有效處理日期。
安裝 date-fns
date-fns 是一個(gè) Node 套件。因此,如果您使用 NPM、Babel 或 Webpack 等工具堆疊,則可以使用下列 npm 命令安裝 date-fns:
npm install date-fns --save
如果您對(duì)其中任何一個(gè)感到陌生,請(qǐng)不要擔(dān)心;您也可以在瀏覽器中使用 date-fns!只需將以下 <script/>
元素新增到您的 HTML 中即可:
<script type="module"> import * as dateFns from 'https://cdn.jsdelivr.net/npm/date-fns/+esm'; </script>
這是一個(gè) JavaScript 模組,從 jsdelivr 網(wǎng)路匯入最新版本的 date-fns 函式庫(kù)。透過此導(dǎo)入,所有 date-fns 函數(shù)和實(shí)用程式都可以透過 dateFns
物件存取。請(qǐng)注意,要成功運(yùn)行本教程中的所有程式碼,程式碼必須包含在導(dǎo)入 date-fns 的相同模組中。
格式化日期
處理日期時(shí)的主要任務(wù)之一是將其格式化為人類可讀的字串。 JavaScript 的 Date
物件對(duì)格式化日期有基本支持,但缺乏對(duì)自訂格式的支援。 date-fns 為此提供了格式化函數(shù)。
const today = new Date(); const formattedDate1 = dateFns.format(today, 'dd MMMM yyyy'); console.log(formattedDate1); // Output: "29 July 2023" const formattedDate2 = dateFns.format(today, 'yyyy-MM-dd'); console.log(formattedDate2); // Output: 2023-07-29
在此範(fàn)例中,我們建立一個(gè)新的 Date
對(duì)象,表示目前日期。然後,我們使用 format()
函數(shù)根據(jù)提供的格式字串格式化日期。格式字串使用佔(zhàn)位符,例如 dd
表示兩位數(shù)的日期,MMMM
表示完整的月份名稱,yyyy
表示全年。
第二次呼叫 format()
使用 yyyy-MM-dd
格式。 MM
佔(zhàn)位符指的是兩位數(shù)月份。
format()
函數(shù)也可以輕鬆格式化時(shí)間。使用h
或hh
佔(zhàn)位符輸出一位或兩位數(shù)的小時(shí),mm
輸出兩位數(shù)的分鐘,a
輸出AM/PM 指示器。例如:
const formattedDateAndTime = dateFns.format(today, 'yyyy-MM-dd h:mm a'); console.log(formattedDateAndTime); // Output: 2023-07-29 12:50 PM
您可以使用許多佔(zhàn)位符來(lái)設(shè)定日期和時(shí)間的格式。下表列出了一些內(nèi)容,但請(qǐng)務(wù)必訪問文件以獲取完整清單。
單位 | 佔(zhàn)位符 | 結(jié)果範(fàn)例 |
---|---|---|
日曆年(2 位數(shù)字) | 年 | 23 |
日曆年(4 位數(shù)字) | 年 | 2023 |
月份(1 位數(shù)) | 中號(hào) | 7 |
月份(2 位數(shù)) | 毫米 | 07 |
月份(簡(jiǎn)稱) | MMM | 一月、二月、十二月 |
月份(全名) | MMMM | 一月、二月 |
一月中的某天(1 位數(shù)字) | d | 5, 23 |
月份中的日期(2 位數(shù)字) | dd | 05, 23 |
星期幾(縮短) | E | 週一、週二、週三 |
星期幾(全名) | EEEE | 週一、週二 |
上午、下午 | 一個(gè) | 上午、下午 |
小時(shí)(12 小時(shí)制,1 位數(shù)) | 小時(shí) | 1,2,10 |
小時(shí)(12 小時(shí)制,2 位數(shù)) | 呵呵 | 01,02,10 |
小時(shí)(24 小時(shí)制,1 位數(shù)) | 小時(shí) | 1、2、10、23 |
小時(shí)(24 小時(shí)制,2 位數(shù)) | 呵呵 | 01,02,10,23 |
分鐘(1 位數(shù)字) | 中號(hào) | 1、2、3、25、30、58 |
分鐘(2 位數(shù)字) | 毫米 | 01,02,03,24,56 |
第二位(1 位數(shù)字) | s | 1、2、3、10、58 |
第二個(gè)(2 位數(shù)字) | SS | 01,02,10,45 |
解析日期
在處理用戶輸入或來(lái)自外部源的數(shù)據(jù)時(shí),我們通常需要解析字符串中的日期。 date-fns 為此提供了 parse()
函數(shù)。
const dateString = '2023-07-15'; const parsedDate = dateFns.parse(dateString, 'yyyy-MM-dd', new Date()); console.log(parsedDate); // Output: Date object representing July 15, 2023
在此代碼中,我們使用格式 yyyy-MM-dd
解析來(lái)自 dateString
的日期,該格式對(duì)應(yīng)于提供的日期字符串。第三個(gè)參數(shù)是用于計(jì)算解析日期的基準(zhǔn)日期。在本例中,我們使用當(dāng)前日期作為基準(zhǔn)。
添加和減去日期
通過添加或減去時(shí)間間隔來(lái)操作日期是日期處理中的常見要求。 date-fns 提供了一組方便的函數(shù)來(lái)輕松執(zhí)行這些操作。
以下示例演示了 addDays()
和 subDays()
函數(shù):
const startDate = new Date(2023, 6, 15); // July 15, 2023 const fiveDaysLater = dateFns.addDays(startDate, 5); console.log(fiveDaysLater); // Output: Date object representing July 20, 2023 const threeDaysAgo = dateFns.subDays(startDate, 3); console.log(threeDaysAgo); // Output: Date object representing July 12, 2023
在此示例中,我們從給定的 2023 年 7 月 15 日的 startDate
開始。然后使用 addDays()
函數(shù)計(jì)算 5 天后的日期,并使用 subDays( )
函數(shù)查找 3 天前的日期。
除了添加和減去天數(shù)之外,date-fns 還提供了添加和減去月份和年份的函數(shù)。正如您所期望的,它們被命名為 addMonths()
、subMonths()
、addYears()
和 subYears()
。
操作日期時(shí),必須注意邊緣情況。例如,當(dāng)減去月份或年份時(shí),結(jié)果日期可能不存在(例如 2 月 30 日),而 date-fns 通過調(diào)整日期來(lái)智能處理這種情況。
const startDate = new Date(2023, 0, 31); // January 31, 2023 const oneMonthLater = dateFns.addMonths(startDate, 1); console.log(oneMonthLater); // Output: Date object representing February 28, 2023
在此示例中,從 2023 年 1 月 31 日開始,添加一個(gè)月結(jié)果為 2023 年 2 月 28 日,因?yàn)?2 月沒有第 31 天。
查找日期之間的差異
JavaScript 的 Date
對(duì)象完全缺乏查找兩個(gè) Date
對(duì)象之間差異的能力。值得慶幸的是,date-fns 有幾個(gè)函數(shù)可以用來(lái)查找兩個(gè) Date
s 之間的差異。其中一些是:
函數(shù)名稱 | 目的 |
---|---|
differenceInMilliseconds() |
獲取給定日期之間的毫秒數(shù)。 |
differenceInSeconds() |
獲取給定日期之間的秒數(shù)。 |
differenceInMinutes() |
獲取給定日期之間的分鐘數(shù)。 |
differenceInHours() |
獲取給定日期之間的小時(shí)數(shù)。 |
differenceInBusinessDays() |
獲取給定日期之間的工作日數(shù)。 |
differenceInDays() |
獲取給定日期之間的完整天數(shù)。 |
differenceInMonths() |
獲取給定日期之間的月數(shù)。 |
differenceInYears() |
獲取給定日期之間的年數(shù)。 |
還有許多其他“差異”函數(shù),因此請(qǐng)務(wù)必檢查文檔。
考慮以下示例:
const startDate = new Date(2023, 6, 15); // July 15, 2023 const endDate = new Date(2023, 6, 22); // July 22, 2023 const daysDifference = dateFns.differenceInDays(endDate, startDate); console.log(daysDifference); // Output: 7
在本例中,我們使用 differenceInDays()
函數(shù)來(lái)計(jì)算 startDate
和 endDate
。輸出為 7
。
使用時(shí)區(qū)
使用時(shí)區(qū)可能是使用日期和時(shí)間時(shí)最令人沮喪的方面之一,但 date-fns 使用 utcToZonedTime()
和 formatDistanceToNow()
等函數(shù)使之變得更容易??紤]以下示例:
const utcDate = new Date(Date.UTC(2023, 6, 15, 12, 0, 0)); const timezone = 'America/New_York'; const zonedDate = dateFns.utcToZonedTime(utcDate, timezone); console.log(dateFns.formatDistanceToNow(zonedDate)); // Output: "6 months"
在此示例中,我們使用 utcToZonedTime()
函數(shù)將 utcDate
轉(zhuǎn)換為 America/New_York
時(shí)區(qū)。然后我們使用 formatDistanceToNow()
函數(shù)來(lái)獲取分區(qū)日期和當(dāng)前時(shí)間之間的時(shí)差。
處理無(wú)效日期
我們永遠(yuǎn)不能信任來(lái)自用戶的數(shù)據(jù),并且通常最好不要信任任何您無(wú)法控制的數(shù)據(jù)。因此,我們需要能夠檢查 Date
是否有效,并且 date-fns 為此提供了 isValid()
函數(shù)。例如:
const validDate = new Date(2023, 1, 30); // February 30, 2023 is not a valid date const invalidDate = new Date(NaN); // Invalid date console.log(dateFns.isValid(validDate)); // Output: true console.log(dateFns.isValid(invalidDate)); // Output: false
此示例創(chuàng)建了有效和無(wú)效的 Date
對(duì)象。然后我們使用 isValid()
函數(shù)來(lái)確定它們是否是有效日期。
結(jié)論
date-fns 是一個(gè)功能強(qiáng)大且易于使用的庫(kù),可以在 JavaScript 中處理日期時(shí)為您節(jié)省大量時(shí)間和精力。本教程僅觸及該庫(kù)功能的表面,因此請(qǐng)務(wù)必通過查看官方文檔來(lái)探索其功能和可用選項(xiàng)。
以上是使用 date-fns 簡(jiǎn)化日期操作的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

WordPress導(dǎo)致服務(wù)器CPU使用率飆升的主要原因包括插件問題、數(shù)據(jù)庫(kù)查詢效率低、主題代碼質(zhì)量差或流量激增。 1.首先通過top、htop或控制面板工具確認(rèn)是否為WordPress引起的高負(fù)載;2.進(jìn)入故障排查模式逐步啟用插件排查性能瓶頸,使用QueryMonitor分析插件執(zhí)行情況並刪除或替換低效插件;3.安裝緩存插件、清理冗餘數(shù)據(jù)、分析慢查詢?nèi)照I以優(yōu)化數(shù)據(jù)庫(kù);4.檢查主題是否存在過度加載內(nèi)容、複雜查詢或缺乏緩存機(jī)制等問題,建議用標(biāo)準(zhǔn)主題測(cè)試對(duì)比並優(yōu)化代碼邏輯。按照上述步驟逐一排查可定位並解

MinifyingJavaScript文件可通過刪除空白、註釋和無(wú)用代碼來(lái)提升WordPress網(wǎng)站加載速度。 1.使用支持合併壓縮的緩存插件如W3TotalCache,在“Minify”選項(xiàng)中啟用並選擇壓縮模式;2.使用專用壓縮插件如FastVelocityMinify,提供更精細(xì)控制;3.手動(dòng)壓縮JS文件並通過FTP上傳,適用於熟悉開發(fā)工具的用戶。注意部分主題或插件腳本可能與壓縮功能衝突,啟用後需徹底測(cè)試網(wǎng)站功能。

防止評(píng)論垃圾信息最有效的方式是通過程序化手段自動(dòng)識(shí)別並攔截。 1.使用驗(yàn)證碼機(jī)制(如GooglereCAPTCHA或hCaptcha)可有效區(qū)分人類與機(jī)器人,尤其適合公眾網(wǎng)站;2.設(shè)置隱藏字段(Honeypot技術(shù)),利用機(jī)器人自動(dòng)填寫特性識(shí)別垃圾評(píng)論,不影響用戶體驗(yàn);3.檢查評(píng)論內(nèi)容關(guān)鍵詞黑名單,通過敏感詞匹配過濾垃圾信息,需注意避免誤判;4.判斷評(píng)論頻率與來(lái)源IP,限制單位時(shí)間內(nèi)的提交次數(shù)並建立黑名單;5.使用第三方反垃圾服務(wù)(如Akismet、Cloudflare)提升識(shí)別準(zhǔn)確性??筛鶕?jù)網(wǎng)站

在開發(fā)Gutenberg塊時(shí),正確enqueue資產(chǎn)的方法包括:1.使用register_block_type指定editor_script、editor_style和style的路徑;2.在functions.php或插件中通過wp_register_script和wp_register_style註冊(cè)資源,並設(shè)置正確的依賴和版本;3.配置構(gòu)建工具輸出合適的模塊格式,並確保路徑一致;4.通過add_theme_support或enqueue_block_assets控制前端樣式的加載邏輯,確保

要添加自定義用戶字段需根據(jù)平臺(tái)選擇擴(kuò)展方式並註意數(shù)據(jù)驗(yàn)證與權(quán)限控制。常見做法包括:1.利用數(shù)據(jù)庫(kù)額外表或鍵值對(duì)結(jié)構(gòu)存儲(chǔ)信息;2.在前端加入輸入框並與後端集成;3.對(duì)敏感數(shù)據(jù)進(jìn)行格式校驗(yàn)和訪問權(quán)限限制;4.更新接口及模板以支持新字段展示與編輯,同時(shí)兼顧移動(dòng)端適配和用戶體驗(yàn)。

在WordPress中添加自定義重寫規(guī)則的關(guān)鍵在於使用add_rewrite_rule函數(shù)並確保規(guī)則正確生效。 1.使用add_rewrite_rule註冊(cè)規(guī)則,格式為add_rewrite_rule($regex,$redirect,$after),其中$regex是正則表達(dá)式匹配URL,$redirect指定實(shí)際查詢,$after控制規(guī)則位置;2.需通過add_filter添加自定義查詢變量;3.修改後必須刷新固定鏈接設(shè)置;4.建議將規(guī)則放在'top'以避免衝突;5.可藉助插件查看當(dāng)前規(guī)則便於

robots.txt對(duì)WordPress網(wǎng)站的SEO至關(guān)重要,能引導(dǎo)搜索引擎抓取行為,避免重複內(nèi)容並提升效率。 1.屏蔽如/wp-admin/、/wp-includes/等系統(tǒng)路徑,但避免誤封/uploads/目錄;2.添加Sitemap路徑如Sitemap:https://yourdomain.com/sitemap.xml以幫助搜索引擎快速發(fā)現(xiàn)站點(diǎn)地圖;3.限制/page/和帶參數(shù)的URL以減少爬蟲浪費(fèi),但需注意勿封重要?dú)w檔頁(yè);4.避免常見錯(cuò)誤如誤封全站、緩存插件影響更新及忽略移動(dòng)端與子域名配

1.使用性能分析插件可快速定位問題,如QueryMonitor可查看數(shù)據(jù)庫(kù)查詢次數(shù)與PHP錯(cuò)誤,BlackboxProfiler生成函數(shù)執(zhí)行報(bào)告,NewRelic提供服務(wù)器級(jí)分析;2.分析PHP執(zhí)行性能需檢查耗時(shí)函數(shù)、調(diào)試工具使用及內(nèi)存分配情況,如Xdebug生成火焰圖輔助優(yōu)化;3.監(jiān)控?cái)?shù)據(jù)庫(kù)查詢效率可通過慢查詢?nèi)照I與索引檢查,QueryMonitor能列出所有SQL並按時(shí)間排序;4.結(jié)合GooglePageSpeedInsights、GTmetrix與WebPageTest等外部工具評(píng)估前端加
