Date-fns教程:现代JavaScript日期处理从入门到精通

1. 安装和快速上手

安装

bash 复制代码
npm install date-fns

快速体验

date-fns 与 Moment、Day.js 最大的不同点------它完全是函数式风格,通过函数操作Date对象,无全局对象污染,无副作用,极小体积。

js 复制代码
import { format } from 'date-fns';

console.log(format(new Date(), 'yyyy-MM-dd HH:mm:ss')); // 2024-06-01 16:08:00

2. 日期的创建与格式化

创建日期

date-fns 直接用原生 Date 对象操作:

js 复制代码
const now = new Date();
const customDate = new Date(2024, 5, 1, 12, 30); // 注意:6月是5,月份从0开始!

日期格式化

js 复制代码
import { format } from 'date-fns';

// 格式化为常用字符串
console.log(format(new Date(), 'yyyy-MM-dd HH:mm:ss')); // 2025-06-02 22:41:57
console.log(format(new Date(), 'EEEE, MMMM do, yyyy'));  // Monday, June 2nd, 2025

format 函数使用类似于Java的格式字符串,详细见 format文档


3. 日期的加减和计算

加减天、月、年

js 复制代码
import { format, addDays, subDays } from 'date-fns';

const today = new Date();
const tomorrow = addDays(today, 1);
const lastMonth = subDays(today, 30);

console.log(format(tomorrow, 'yyyy-MM-dd'));  // 明天
console.log(format(lastMonth, 'yyyy-MM-dd')); // 30天前

计算日期差异

js 复制代码
import { differenceInDays, differenceInMonths } from 'date-fns';

const d1 = new Date(2024, 5, 1);
const d2 = new Date(2024, 5, 21);

console.log(differenceInDays(d2, d1));    // 20
console.log(differenceInMonths(d2, d1));  // 0

4. 判断与比较日期

js 复制代码
import { isBefore, isAfter, isEqual } from 'date-fns';

const dA = new Date(2024, 5, 1);
const dB = new Date(2024, 6, 1);

console.log(isBefore(dA, dB)); // true
console.log(isAfter(dA, dB));  // false
console.log(isEqual(dA, new Date(2024, 5, 1))); // true

5. 日期区间&常用工具函数

判断日期是否在区间

js 复制代码
import { isWithinInterval } from 'date-fns';

const date = new Date(2024, 5, 10);
const start = new Date(2024, 5, 1);
const end = new Date(2024, 5, 30);

console.log(isWithinInterval(date, { start, end })); // true

获得月初月末

js 复制代码
import {format, startOfMonth, endOfMonth } from 'date-fns';

const now = new Date();
console.log(format(startOfMonth(now), 'yyyy-MM-dd')); // 月初
console.log(format(endOfMonth(now), 'yyyy-MM-dd'));   // 月末

6. 本地化、多语言支持

date-fns拥有完善的本地化支持,且无需全局配置!

js 复制代码
import { format } from 'date-fns';
import { zhCN } from 'date-fns/locale';

const today = new Date();
console.log(format(today, 'PPPP', { locale: zhCN })); // 2025年6月2日 星期一

结语

date-fns是现代JavaScript日期处理的最佳实践之选------全面、轻巧、函数式、可本地化。


点个赞,关注我获取更多实用 JavaScript 技术干货!如果觉得有用,记得收藏本文!

相关推荐
满分观察网友z3 分钟前
揭秘 Intersection Observer:让你的网页“活”起来!
前端·javascript
小佐_小佑4 分钟前
如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)
前端
nvvas10 分钟前
前端Nodejs报错:Browserslist: caniuse-lite is outdated. Please run: npx update...
前端
Data_Adventure40 分钟前
Vite 项目中使用 vite-plugin-dts 插件的详细指南
前端·vue.js
八戒社43 分钟前
如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)
前端·css·tensorflow·wordpress
xzboss1 小时前
DOM转矢量PDF
前端·javascript
一无所有不好吗1 小时前
纯前端vue项目实现版本更新(纯代码教程)
前端
萌萌哒草头将军1 小时前
🏖️ 舒服,原来写代码还可以这么享受😎!沉浸式敲代码神器!
javascript·vue.js·react.js
安全系统学习1 小时前
内网横向之RDP缓存利用
前端·安全·web安全·网络安全·中间件
Hilaku1 小时前
为什么我不再相信 Tailwind?三个月重构项目教会我的事
前端·css·前端框架