当前位置: 首页 > news >正文

date-fns 现代 JavaScript 日期实用程序库(基础篇)上

date-fns 现代 JavaScript 日期实用程序库(基础篇) 上

文章目录

  • date-fns 现代 JavaScript 日期实用程序库(基础篇) 上
    • 一、前言
    • 二、开始使用
      • 2.1 扩展:版本核心差异概览
    • 三、日期格式化
      • 3.1 基础使用
      • 3.2 格式化日期辅助函数封装
      • 3.3 扩展:世界语言与语法格
      • 3.4 扩张:格式模板对照表
    • 四、头尾日期快速定位
      • 4.1 起始日期获取
      • 4.2 结束日期获取
    • 六、参考资料💘
    • 七、推荐博文🍗


一、前言

若是要从 JavaScript 前端的日期处理包中推荐一个,博主会毫不犹豫的首推 date-fns,与 DayJs 对比,date-fns 功能更强大,使用起来更方便

  • date-fns 使用原生的 Date 类型进行操作,它不会扩展核心 Date 对象。这意味着能够直接编写日期处理代码,同时也不需要学习特定的封装类型。
  • I18n国际化支持十分完善,在令人惊叹的社区的支持下,date-fns 拥有数十个区域设置。只有您使用的项目才会包含在您的项目中。
  • 对于使用 TypeScript 编写的项目,date-fns完美支持 TypeScript 类型推断,其源码本身就是使用 TypeScript 编写,当然这并不意味着一定要用于 TypeScript 项目上,对于不使用 TypeScript 的项目,也能通过 IDE 获取完美的语法提示和代码补全。
  • 截止到 2025年10月,date-fns在 npmjs 发布的第一个版本到现在的最新版本,已有超过 11 年的时间,周下载量在 35,098,230 次左右,可以说这也是一个很老牌的依赖,伙计们放心用就行。
特性Moment.jsdayjsdate-fns
包大小67.8KB (完整)2.3KB (核心)动态构建输出,最小 1KB 不到,最大 80KB (完整)
按需加载✅(插件系统)✅(模块化)
不可变性❌ (默认可变)
API风格链式调用链式调用函数式
性能⚠️ 较慢⚠️ 中等✅ 快
时区支持需插件(moment-timezone)需插件需使用 date-fns-tz 依赖
Tree-shaking⚠️ 有限
维护状态❌ (已停止维护)✅ 活跃✅ 活跃
国际化✅ (内置)✅ (插件)✅ (按需加载locale)
周起始配置全局配置全局配置按调用配置

二、开始使用

# 最新版本获取👇
npm i date-fns
# or
yarn add date-fns
# or
pnpm add date-fns# NodeJs 16\14
yarn add date-fns@^2.30.0

官网文档中并没有明确写明各版本与 NodeJs 的兼容性,甚至在 NPM 官网包信息里也并没有对应 engine 表示最低 NodeJs 版本,这也是很多人在开始使用 date-fns时就遇到本地开发环境的 NodeJs 版本与 date-fns不兼容报错,再加上 date-fns 在国内比较正式的中文文档难以寻找,这就导致很多人难以发现或则一开始就放弃使用的原因。

经过博主查阅各版本的 date-fns 依赖性信息以及的不同版本的安装测试,为大伙提供各版本 date-fns与 NodeJs 版本兼容性表,咱可以通过此对照表安装适合项目所依赖的 NodeJs 版本,对于 NodeJs 14 以下的版本并不纳入检测范围,建议使用项目中原有处理日期时间依赖。

NodeJs 版本NodeJs 14NodeJs 16NodeJs 18NodeJs >= 20
date-fns 版本^2.30.0✅^2.30.0✅^2.30.0✅
^3.6.0✅
^4.1.0✅
^2.30.0✅
^3.6.0✅
^4.1.0✅

若Node版本不符合要求,且存在切换 Node 版本的需求,可以参考:NVM NodeJs版本管理 通关宝典

在最新版本的 date-fns 里,某些模块工具会比旧版本多出一些扩展参数,但与旧版本的用法兼容,这些扩展参数用上的可能性较低,因此博文内不会特别讲解这些新特性参数,尽量以简单实用为主。

2.1 扩展:版本核心差异概览

维度v1.xv2.xv3.xv4.x
发布时间2017年前2018-20222023-20242024至今
Node.js 最低要求≥6.0≥8.0≥14.0≥16.8
包体积 (gzip)≈80KB≈60KB≈45KB≈35KB
Tree Shaking 支持有限✅ 优化✅ 增强极致优化
函数式编程支持❌ 无fp 子模块✅ 增强完整柯里化
时区处理date-fns-tz</font>date-fns-tz</font>部分内置原生强化

v2.x 里程碑

  • 模块化革命:每个函数独立导出。
  • 国际化内置:支持 50+ 语言环境(import { es } from 'date-fns/locale')。
  • FP 子模块:提供柯里化函数(date-fns/fp)。

v3.x 突破

  • TypeScript 深度集成:类型覆盖率 100%。
  • 破坏性变更
    • 格式化符号统一小写(YYYY -> yyyy)。
    • 时区函数部分移至核心库(如 zonedTimeToUtc)。
  • 新增 formatDistanceStrict 等 20+ 函数。

v4.x 现代化升级

  1. API 重构,但并没有特别破坏性的改动,大多数只是简单调换了顺序或增加了新的候补参数:
// v3: add(date, amount) → v4: add(amount, date)
addDays(new Date(), 7); // v4 报错❌
addDays(7, new Date()); // v4 正确✅
  1. Temporal API 实验性支持:
import { toTemporalInstant } from "date-fns-temporal";
const temporalDate = toTemporalInstant(new Date());
  1. 时区计算增强:无需 date-fns-tz 处理夏令时。
  2. ECMAScript 2021 语法:空值合并 (??)、逻辑赋值等。

性能对比(常见操作 ops/s,Node.js 20 环境)

以下为部分 liunx 测试脚本以及 AI 问答结果,不一定准确但可以进行大致的简单参考。

操作v2.30v3.3v4.0提升幅度
format()</font>142k163k192k↑18%
addDays()</font>342k385k462k↑20%
isWithinInterval()</font>210k280k315k↑50%
时区转换85k102k135k↑32%

三、日期格式化

咱们之所以使用日期处理包,日期格式化这个功能占了很大的原因,可以不用其他与日期相关的功能,但一定不能没有格式化,date-fns 的格式化功能十分强大,模板基于 Unicode Locale Data Markup Language (LDML) Part 4: Dates 标准,并扩展了一些内容。

3.1 基础使用

import { format } from "date-fns";// ISO 8601 标准格式
console.log("ISO 8601 标准格式", format(new Date(), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z"));// 简洁日期格式
console.log("yyyyMMdd", format(new Date(), "yyyyMMdd"));// yyyy-MM-dd HH:mm:ss
console.log("yyyy-MM-dd HH:mm:ss", format(new Date(), "yyyy-MM-dd HH:mm:ss"));
console.log("yyyy-MM-dd HH:mm:ss", format(new Date(2000, 22, 2, 2, 2), "yyyy-MM-dd HH:mm:ss"));// IOS 兼容格式
console.log("yyyy/MM/dd HH:mm:ss", format(new Date(), "yyyy/MM/dd HH:mm:ss"));
console.log("yyyy/MM/dd HH:mm:ss", format(new Date(2000, 22, 2, 2, 2), "yyyy/MM/dd HH:mm:ss"));// 12小时制时间
console.log("hh:mm:ss a", format(new Date(), "hh:mm:ss a"));// 毫秒级时间
console.log("yyyy-MM-dd HH:mm:ss", format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"));// 文件命名友好格式
console.log("yyyy_MM_dd_HH_mm_ss", format(new Date(), "yyyy_MM_dd_HH_mm_ss"));// 美式日期格式
console.log("MM/dd/yyyy", format(new Date(), "MM/dd/yyyy"));// 欧式日期格式
console.log("dd/MM/yyyy", format(new Date(), "dd/MM/yyyy"));// 单引号防转义字符标识
// -> yyyyMMdd
console.log("yyyyMMdd", format(new Date(), "'yyyyMMdd'"));

3.2 格式化日期辅助函数封装

import { format } from "date-fns";/*** 格式化日期辅助函数* @param date 日期* @param options 格式化参数*/
export function formatDate(date: string | Date, options: string | { pattern?: string; def?: string } = {}) {if (typeof options === "string") {options = { pattern: options }}options = Object.assign({ pattern: "yyyy-MM-dd HH:mm:ss", def: "--" }, options)try {if (!(date instanceof Date)) {date = new Date(date)}return format(date, options.pattern!)} catch {return options.def}
}

3.3 扩展:世界语言与语法格

由于中文没有语法格变化,大部分人都是对语法格感到十分的陌生,如果你是一名会外语的高手,恰巧你会的语言之中存在语法格,那么你一定明白语法格是什么,或是熟悉编写国际化代码的小伙伴,或多或少也了解过语法格这个东西。

本文针对于在编程上使用日期格式化的扩展知识章节,可以简单讲语法格的使用概叙为一句话:某些语言在描述单独一个日期单位和一个完整日期时存在语法上的差别。

语法格定义功能
主格 (Nominative Case)表示动作的执行者或事物的主体1. 作为句子的主语
2. 作为谓语的表语
3. 独立存在时使用
属格 (Genitive Case)表示所属关系或修饰关系1. 表示所有关系(“的”)
2. 表示部分关系
3. 作为其他词的修饰语

咱接着往下讲,拿中文和**俄语**举例,中文里可以这么去描述时间“2022年10月24日” 和 “10月”,但在俄文里就需要这么去写了“24 октября 2022 года”和“Октябрь”仔细看,对于月这个词是存在差异的。

中文与俄语月份对照表

月份中文俄语主格俄语属格发音(主格→属格)
1月一月Январьянваря[jan-vár’] → [yan-var-yá]
2月二月Февральфевраля[fev-rál’] → [fev-ral-yá]
3月三月Мартмарта[mart] → [már-ta]
4月四月Апрельапреля[ap-rél’] → [ap-rel-yá]
5月五月Маймая[maj] → [ma-yá]
6月六月Июньиюня[i-yún’] → [i-yun-á]
7月七月Июльиюля[i-yúl’] → [i-yul-yá]
8月八月Августавгуста[av-gust] → [av-gus-ta]
9月九月Сентябрьсентября[sen-tyábr’] → [sen-tyab-ryá]
10月十月Октябрьоктября[ak-tyábr’] → [ak-tyab-ryá]
11月十一月Ноябрьноября[na-yábr’] → [na-yab-ryá]
12月十二月Декабрьдекабря[de-kábr’] → [de-kab-ryá]

虽然现代中文没有格变化,但古汉语曾有类似机制。

古汉语结构功能现代对应
“吾”(主格)主语
“我”(属格)所有我的
“之”(属格标记)所属
“乎”(与格)间接宾语给/对
  • 古:“书”(主格+属格)
  • 今:“书”(无格变化)

3.4 扩张:格式模板对照表

部分格式需要配合国际化使用,否则将显示默认的英文。

单位模板结果示例备注
纪元(Era)G…GGGAD, BC
GGGGAnno Domini, Before Christ
GGGGGA, B
日历年(Calendar year)y44, 1, 1900, 2017
yo44th, 1st, 0th, 17th
yy44, 01, 00, 17
yyy044, 001, 1900, 2017
yyyy0044, 0001, 1900, 2017
yyyyy
本地周编号年份(Local week-numbering year)Y44, 1, 1900, 2017
Yo44th, 1st, 1900th, 2017th
YY44, 01, 00, 17
YYY044, 001, 1900, 2017
YYYY0044, 0001, 1900, 2017
YYYYY
ISO 标准 周编号年份(ISO week-numbering year)R-43, 0, 1, 1900, 2017ISO 8601 标准日期格式
RR-43, 00, 01, 1900, 2017
RRR-043, 000, 001, 1900, 2017
RRRR-0043, 0000, 0001, 1900, 2017
RRRRR
扩展年份(Extended year)u-43, 0, 1, 1900, 2017ISO 8601标准中定义的日期表示法,用于表示超出常规年份范围(0000-9999)的日期,主要处理:
1. 公元前的年份(BCE,如公元前1000年)
2. 超大年份(如公元10000年)
3. 科学和天文学领域需要表示的极远时间点
uu-43, 01, 1900, 2017
uuu-043, 001, 1900, 2017
uuuu-0043, 0001, 1900, 2017
uuuuu
季度(Quarter)Q1, 2, 3, 4
Qo1st, 2nd, 3rd, 4th
QQ01, 02, 03, 04
QQQQ1, Q2, Q3, Q4
QQQQQ1, Q2, Q3, Q4
QQQQQ1, 2, 3, 4
季度主格(Quarter)(stand-alone)q1, 2, 3, 4主格语法,详情参考:3.3 扩展:世界语言与语法格
qo1st, 2nd, 3rd, 4th
qq01, 02, 03, 04
qqqQ1, Q2, Q3, Q4
qqqq1st quarter, 2nd quarter, …
qqqqq1, 2, 3, 4
月度(Month)M1, 2, …, 12
Mo1st, 2nd, …, 12th
MM01, 02, …, 12
MMMJan, Feb, …, Dec
MMMMJanuary, February, …, December
MMMMMJ, F, …, D
月度主格 (Month)(stand-alone)L1, 2, …, 12主格语法,详情参考:3.3 扩展:世界语言与语法格
Lo1st, 2nd, …, 12th
LL01, 02, …, 12
LLLJan, Feb, …, Dec
LLLLJanuary, February, …, December
LLLLLJ, F, …, D
本地今年中的第几个星期(Local week of year)w1, 2, …, 53
wo1st, 2nd, …, 53th
ww01, 02, …, 53
ISO 标准 今年中的第几个星期(ISO week of year)I1, 2, …, 53
Io1st, 2nd, …, 53th
II01, 02, …, 53
这个月的第几天(Day of month)d1, 2, …, 31
do1st, 2nd, …, 31st
dd01, 02, …, 31
今年的第几天(Day of year)D1, 2, …, 365, 366
Do1st, 2nd, …, 365th, 366th
DD01, 02, …, 365, 366
DDD001, 002, …, 365, 366
DDDD
这个星期的第几天(Day of week)E…EEEMon, Tue, Wed, …, Sun
EEEEMonday, Tuesday, …, Sunday
EEEEEM, T, W, T, F, S, S
EEEEEEMo, Tu, We, Th, Fr, Sa, Su
ISO 标准 这个星期的第几天(ISO day of week)i1, 2, 3, …, 7
io1st, 2nd, …, 7th
ii01, 02, …, 07
iiiMon, Tue, Wed, …, Sun
iiiiMonday, Tuesday, …, Sunday
iiiiiM, T, W, T, F, S, S
iiiiiiMo, Tu, We, Th, Fr, Sa, Su
本地星期的第几天(Local day of week)e2, 3, 4, …, 1
eo2nd, 3rd, …, 1st
ee02, 03, …, 01
eeeMon, Tue, Wed, …, Sun
eeeeMonday, Tuesday, …, Sunday
eeeeeM, T, W, T, F, S, S
eeeeeeMo, Tu, We, Th, Fr, Sa, Su
本地星期的第几天主格(Local day of week )(stand-alone)c2, 3, 4, …, 1主格语法,详情参考:3.3 扩展:世界语言与语法格
co2nd, 3rd, …, 1st
cc02, 03, …, 01
cccMon, Tue, Wed, …, Sun
ccccMonday, Tuesday, …, Sunday
cccccM, T, W, T, F, S, S
ccccccMo, Tu, We, Th, Fr, Sa, Su
上午,下午 (AM, PM)a…aaAM, PM
aaaam, pm
aaaaa.m., p.m.
aaaaaa, p
上午,下午,正午,午夜(AM, PM, noon, midnight)b…bbAM, PM, noon, midnight
bbbam, pm, noon, midnight
bbbba.m., p.m., noon, midnight
bbbbba, p, n, mi
弹性工作日(Flexible day period)B…BBBat night, in the morning, …
BBBBat night, in the morning, …
BBBBBat night, in the morning, …
小时(Hour 1-12)h1, 2, …, 11, 12
ho1st, 2nd, …, 11th, 12th
hh01, 02, …, 11, 12
小时(Hour 0-23)H0, 1, 2, …, 23
Ho0th, 1st, 2nd, …, 23rd
HH00, 01, 02, …, 23
小时(Hour 0-11)K1, 2, …, 11, 0
Ko1st, 2nd, …, 11th, 0th
KK01, 02, …, 11, 00
小时(Hour 1-24)k24, 1, 2, …, 23
ko24th, 1st, 2nd, …, 23rd
kk24, 01, 02, …, 23
分钟(Minute)m0, 1, …, 59
mo0th, 1st, …, 59th
mm00, 01, …, 59
秒(Second)s0, 1, …, 59
so0th, 1st, …, 59th
ss00, 01, …, 59
毫秒(Fraction of second)S0, 1, …, 9
SS00, 01, …, 99
SSS000, 001, …, 999
SSSS
时区 Timezone (ISO-8601 w/ Z)X-08, +0530, Z
XX-0800, +0530, Z
XXX-08:00, +05:30, Z
XXXX-0800, +0530, Z, +123456
XXXXX-08:00, +05:30, Z, +12:34:56
时区 Timezone (ISO-8601 w/o Z)x-08, +0530, +00
xx-0800, +0530, +0000
xxx-08:00, +05:30, +00:00
xxxx-0800, +0530, +0000, +123456
xxxxx-08:00, +05:30, +00:00, +12:34:56
时区 Timezone (GMT)O…OOOGMT-8, GMT+5:30, GMT+0
OOOOGMT-08:00, GMT+05:30, GMT+00:00
时区 Timezone (specific non-locat.)z…zzzGMT-8, GMT+5:30, GMT+0
zzzzGMT-08:00, GMT+05:30, GMT+00:00
秒的时间戳(Seconds timestamp)t512969520
tt
毫秒级时间戳(Milliseconds timestamp)T512969520900
TT
长格式本地化日期(Long localized date)P04/29/1453
PPApr 29, 1453
PPPApril 29th, 1453
PPPPFriday, April 29th, 1453
长时间的本地化(Long localized time)p12:00 AM
pp12:00:00 AM
ppp12:00:00 AM GMT+2
pppp12:00:00 AM GMT+02:00
日期与时间的组合(Combination of date and time)Pp04/29/1453, 12:00 AM
PPppApr 29, 1453, 12:00:00 AM
PPPpppApril 29th, 1453 at …
PPPPppppFriday, April 29th, 1453 at …

四、头尾日期快速定位

date-fns 实现头尾日期快速定位也十分方便,由于是使用引入模块的方式,与 dayjs 对比,最大的好处就是不用记住具体的字符串参数就能直接使用,同时会返回一个新的对象而不会修改之前的日期和拥有更多的精度支持,以下是具体对比表,感兴趣的可以自行看看👇

功能Day.jsdate-fns
月份首尾.startOf('month')
.endOf('month')
startOfMonth(date)
endOfMonth(date)
周首尾(可配起始).startOf('week')
.endOf('week')
(默认周日,可配置)
startOfWeek(date, {weekStartsOn: 1})
endOfWeek(date, {weekStartsOn: 1})
季度首尾.startOf('quarter')
.endOf('quarter')
startOfQuarter(date)
endOfQuarter(date)
年度首尾.startOf('year')
.endOf('year')
startOfYear(date)
endOfYear(date)
时分秒首尾.startOf('hour')
.endOf('minute')
startOfHour(date)
endOfMinute(date)
链式调用✅ 支持完整链式操作❌ 需嵌套或变量存储
不可变性❌ 默认可变(需.clone())✅ 所有函数返回新对象
周起始日配置全局设置:dayjs.extend(weekOfYear)每次调用时作为选项参数传递
时间精度控制⚠️ 需插件支持✅ 内置支持(如endOfToday()
ISO 周支持需插件:dayjs.extend(isoWeek)✅ 内置:startOfISOWeek(date)

4.1 起始日期获取

基础方法

方法名参数描述
startOfSecond(date: Date) => Date返回给定日期的秒开始时刻
startOfMinute(date: Date) => Date返回给定日期的分钟开始时刻
startOfHour(date: Date) => Date返回给定日期的小时开始时刻
startOfDay(date: Date) => Date返回给定日期的天开始时刻
startOfWeek(date: Date) => Date返回给定日期的周开始时刻
startOfMonth(date: Date) => Date返回给定日期的月开始时刻
startOfYear(date: Date) => Date返回给定日期的年开始时刻
import { format, startOfSecond, startOfMinute, startOfHour,startOfDay, startOfWeek, startOfMonth, startOfYear } from "date-fns";function print(date: Date) {console.log(format(date, "yyyy-MM-dd HH:mm:ss.SSS"));
}console.group("date-fns起始日期获取示例 基础方法");// 当前时间,与下列示例对比
// -> 2025-10-21 15:10:25.317
print(new Date());// 返回给定日期的秒开始时刻
// -> 2025-10-21 15:10:25.000
print(startOfSecond(new Date()));// 返回给定日期的分钟开始时刻
// -> 2025-10-21 15:10:00.000
print(startOfMinute(new Date()));// 返回给定日期的小时开始时刻
// -> 2025-10-21 15:00:00.000
print(startOfHour(new Date()));// 返回给定日期的天开始时刻
// -> 2025-10-21 00:00:00.000
print(startOfDay(new Date()));// 返回给定日期的周开始时刻
// -> 2025-10-19 00:00:00.000
print(startOfWeek(new Date()));// 返回给定日期的月开始时刻
// -> 2025-10-01 00:00:00.000
print(startOfMonth(new Date()));// 返回给定日期的年开始时刻
// -> 2025-01-01 00:00:00.000
print(startOfYear(new Date()));console.groupEnd();

扩展方法

方法名参数描述
startOfToday() => Date返回当天的开始时刻
startOfTomorrow() => Date返回明天的开始时刻
startOfYesterday() => Date返回昨天的开始时刻
startOfQuarter(date: Date) => Date返回给定日期当前季度的开始时刻
startOfDecade(date: Date) => Date返回给定日期十年内的开始时刻
import { format, startOfToday, startOfTomorrow, startOfYesterday, startOfQuarter, startOfDecade } from "date-fns";function print(date: Date) {console.log(format(date, "yyyy-MM-dd HH:mm:ss.SSS"));
}console.group("date-fns起始日期获取示例 扩展方法");// 当前时间,与下列示例对比
// -> 2025-10-21 15:28:00.569
print(new Date());// 返回当天的开始时刻
// -> 2025-10-21 00:00:00.000
print(startOfToday());// 返回明天的开始时刻
// -> 2025-10-22 00:00:00.000
print(startOfTomorrow());// 返回昨天的开始时刻
// -> 2025-10-20 00:00:00.000
print(startOfYesterday());// 返回给定日期当前季度的开始时刻
// -> 2025-10-01 00:00:00.000
print(startOfQuarter(new Date()));// 返回给定日期十年内的开始时刻
// -> 2020-01-01 00:00:00.000
print(startOfDecade(new Date()));console.groupEnd();

4.2 结束日期获取

基础方法

方法名参数描述
endOfSecond(date: Date) => Date返回给定日期的秒开始时刻
endOfMinute(date: Date) => Date返回给定日期的分钟开始时刻
endOfHour(date: Date) => Date返回给定日期的小时开始时刻
endOfDay(date: Date) => Date返回给定日期的天开始时刻
endOfWeek(date: Date) => Date返回给定日期的天开始时刻
endOfMonth(date: Date) => Date返回给定日期的月开始时刻
endOfYear(date: Date) => Date返回给定日期的年开始时刻
import { format, endOfSecond, endOfMinute, endOfHour, endOfDay, endOfWeek, endOfMonth, endOfYear } from "date-fns";function print(date: Date) {console.log(format(date, "yyyy-MM-dd HH:mm:ss.SSS"));
}console.group("date-fns结束日期获取示例 基础方法");// 当前时间,与下列示例对比
// -> 2025-10-21 16:39:11.253
print(new Date());// 返回给定日期的秒开始时刻
// -> 2025-10-21 16:39:11.999
print(endOfSecond(new Date()));// 返回给定日期的分钟开始时刻
// -> 2025-10-21 16:39:59.999
print(endOfMinute(new Date()));// 返回给定日期的小时开始时刻
// -> 2025-10-21 16:59:59.999
print(endOfHour(new Date()));// 返回给定日期的天开始时刻
// -> 2025-10-21 23:59:59.999
print(endOfDay(new Date()));// 返回给定日期的周开始时刻
// -> 2025-10-25 23:59:59.999
print(endOfWeek(new Date()));// 返回给定日期的月开始时刻
// -> 2025-10-31 23:59:59.999
print(endOfMonth(new Date()));// 返回给定日期的年开始时刻
// -> 2025-12-31 23:59:59.999
print(endOfYear(new Date()));console.groupEnd();

扩展精度方法

方法名参数描述
endOfToday() => Date返回当天的开始时刻
endOfTomorrow() => Date返回明天的开始时刻
endOfYesterday() => Date返回昨天的开始时刻
endOfQuarter(date: Date) => Date返回给定日期当前季度的开始时刻
endOfDecade(date: Date) => Date返回给定日期十年内的开始时刻
import { format, endOfToday, endOfTomorrow, endOfYesterday, endOfQuarter, endOfDecade} from "date-fns";function print(date: Date) {console.log(format(date, "yyyy-MM-dd HH:mm:ss.SSS"));
}console.group("date-fns结束日期获取示例 扩展方法");// 当前时间,与下列示例对比
// -> 2025-10-21 16:45:28.586
print(new Date());// 返回当天的开始时刻
// -> 2025-10-21 23:59:59.999
print(endOfToday());// 返回明天的开始时刻
// -> 2025-10-22 23:59:59.999
print(endOfTomorrow());// 返回昨天的开始时刻
// -> 2025-10-20 23:59:59.999
print(endOfYesterday());// 返回给定日期当前季度的开始时刻
// -> 2025-12-31 23:59:59.999
print(endOfQuarter(new Date()));// 返回给定日期十年内的开始时刻
// -> 2029-12-31 23:59:59.999
print(endOfDecade(new Date()));console.groupEnd();

六、参考资料💘

  • 官方手册:
    • Modern JavaScript Date Utility Library
  • 包依赖地址:
    • GitHub - date-fns/date-fns: ⏳ Modern JavaScript date utility library ⌛️
    • npm date-fns

七、推荐博文🍗

  • date-fns 现代 JavaScript 日期实用程序库(高级篇) 下

  • NVM NodeJs版本管理 通关宝典

  • 『精』Sass 核心程序设计指南(这一篇就够了!)

http://www.dtcms.com/a/525150.html

相关文章:

  • 调整为 dart-sass 支持的语法,将深度选择器/deep/调整为::v-deep
  • 做设计常用网站有哪些怎样注册公司流程
  • Less:让CSS开发更简单的预处理器
  • 生态文明建设网站企业管理者培训查询
  • 用腾讯云做淘宝客购物网站视频商城平台开发公司
  • ASE04-冰冻效果
  • 宁波建设业协会网站宜黄县建设局网站
  • 详细解释 std::thread t1(ThreadPrinter::print, printer, 1);
  • 云建站的正确步骤客户关系crm管理系统
  • RocketMQ核心技术精讲-----初识RocketMQ与快速上手
  • 青岛的互联网公司有哪些西安做网站优化
  • 香橙派双雄:OPi 6 Plus与4 Pro,以差异化战略切割边缘AI市场
  • openai-cookbook:what makes documentation good(翻译总结)
  • 智能网联汽车网络发展需求与模式分析:面向2030年的核心逻辑
  • java transient关键字有什么用
  • 免费建站哪个比较好大学 生免费商业网站设计
  • perl网站开发企业培训内容有哪些
  • 医疗信创的里程碑:浙江省人民医院异构多活容灾架构的突破与启示
  • KingbaseES数据库:首个多院区异构多活容灾架构,浙人医创新开新篇
  • 标注可用于IP≠实战可用——超50%的IP抗体实际效果欠佳,如何实现0风险IP实验?
  • 建设人才证书查询网站做网站的公司北京有哪些
  • python with 语法
  • tlv32aic32 外部DAC的I2S音频流运行过程分析
  • I/V自动曲线量测仪的主要功能、测量方法和应用
  • 什么是电子负载?爱科赛博电子负载应用探讨
  • 2025.10.24总结
  • 邯郸哪里做网站优化thinkphp企业网站源码
  • BUYCOIN:以社区共治重构加密交易版图,定义交易所3.0时代
  • 建立平台网站需要花多少钱国贸附近网站建设
  • 【Linux C/C++开发】epoll模式的开源库及原生socket实现