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

date-fns:200+ 函数的 JavaScript 日期工具库

文章目录

  • date-fns:200+ 函数的 JavaScript 日期工具库
    • 1、解决了什么
    • 2、核心设计原则
    • 3、主要使用场景
    • 4、v4.0 的时区支持

date-fns:200+ 函数的 JavaScript 日期工具库

date-fns 在 GitHub 上拿到了 36.5K Star。

JavaScript 的 Date 对象设计反直觉:月份从 0 开始计数,getDay()返回星期而非日期,时区操作几乎空白。Moment.js 曾是事实标准,但已进入维护模式,官方不再推荐新项目使用。date-fns 是目前接替这个位置的候选之一。

1、解决了什么

两个问题:API 可用性和打包体积。

Moment.js 封装了易用的 API,但整体导入,tree-shaking 对它无效。一个只用了format函数的页面,会把整份 Moment.js 都打包进去。date-fns 的做法不同:200 多个函数拆成独立模块,import哪个就打包哪个,Webpack 和 Rollup 的 tree-shaking 默认生效。

另一个差异是数据不可变。每个函数输入原日期,返回新日期,不修改原始对象。在 React 和 Vue 的状态管理场景里,这个性质直接影响数据流是否可控。举个例子,用原生 Date 的setDate()会原地修改对象,而 date-fns 的setDate函数返回一个全新实例,旧值不受影响。

2、核心设计原则

原生 Date 类型。不包装、不扩展原生对象,传进去的是Date,拿出来的还是Date。与浏览器 API 和第三方库的兼容没有额外成本。你可以直接把 date-fns 的返回值传给任何接受Date参数的函数。

TypeScript 全覆盖。整个库用 TypeScript 重写,类型定义全部手写,IDE 补全和类型检查的准确度高于自动生成的类型声明。函数的参数签名和返回值都有明确的类型约束,编译阶段就能发现日期类型的使用错误。

国际化按需加载。几十种语言包同样遵循按模块引入的原则,只需要import { zhCN } from 'date-fns/locale'就能使用中文格式化,其他语言不会进入最终打包产物。

基本用法:

import{compareAsc,format}from"date-fns";format(newDate(2014,1,11),"yyyy-MM-dd");//=> '2014-02-11'constdates=[newDate(1995,6,2),newDate(1987,1,11),newDate(1989,6,10),];dates.sort(compareAsc);//=> 按时间升序排列

常用函数涵盖了日期计算的各个方向:addDayssubMonths做加减,differenceInDaysdifferenceInHours算差值,isBeforeisAfterisEqual做比较,startOfDayendOfMonth取边界。200 多个函数的覆盖面已经相当完整。

3、主要使用场景

替换 Moment.js。Moment.js 官方列出的替代方案中,date-fns 是迁移路径最短的一个,API 风格接近,学习成本低。Moment.js 的moment().format('YYYY-MM-DD')可以对应到format(new Date(), 'yyyy-MM-dd'),迁移时逐个函数替换即可。

现代前端工程。TypeScript + tree-shaking 的体系下,date-fns 的模块化设计直接匹配这条工具链,不需要额外配置。Next.js、Vite 这类构建工具默认就能做 tree-shaking,最终打包体积只包含实际使用的函数。

服务端日期计算。纯函数、无副作用,在 Node.js 后端中批量处理时间数据时,行为可预测,测试也简单。不依赖浏览器环境,不需要 DOM 或window对象,单元测试直接构造Date参数即可。

4、v4.0 的时区支持

date-fns v4.0 把时区能力内建到了核心函数中。此前处理时区需要辅助函数和外部数据源,v4.0 直接提供一等公民的时区支持。对于跨国业务、国际化 SaaS、全球用户时区展示这些场景,减少了一层外部依赖。同时 v4.0 保持了 API 的向后兼容,v3 的代码升级到 v4 不需要大规模修改。

安装:

npminstalldate-fns--save

不需要大规模修改。

安装:

npminstalldate-fns--save
http://www.cnnetsun.cn/news/2750315.html

相关文章:

  • 2026 电商爆单密码:怎么用 AI 生成带货视频?高性价比工具深度盘点
  • 高灵敏+高特异 | 多疾病领域小分子ELISA试剂盒优选方案
  • GPT-5.4 Pro静默升级深度解析:推理加速与多模态优化实战指南
  • 番茄小说下载器:打造个人专属离线图书馆的终极指南 [特殊字符]
  • 从安装到调参:一份超详细的imbalanced-learn避坑指南(含版本依赖与常见报错解决)
  • ORB-SLAM Atlas里的‘相机位姿可观测性’到底在防什么坑?一个公式讲清多地图的精度秘密
  • MATLAB最小费用最大流求解工具包:含Ford-Bellman增广路径实现
  • 2026年3月三级T2:上升三元组
  • 5k Star的直播自动录制工具biliup,支持20+平台持续录像上传
  • (ASP + Access)网页版文档文件(证照、档案、合同等)管理系统
  • 如何用Python构建同花顺自动化交易系统:jqktrader技术深度解析
  • 别只画图了!深度挖掘VOSviewer三大视图(网络/覆盖/密度)背后的科研故事与隐藏信息
  • 基于STM32的4000W数字交流调光器:从原理到实战设计
  • 跳出模板化写作桎梏:okbiye 以分层式毕业论文创作逻辑重构毕业生撰写新范式
  • 2026年6月效果好、服务稳定的GEO服务商有哪些
  • 别再手动敲了!用WPS宏一键搞定汉字转拼音首字母(附完整代码和避坑指南)
  • 从零打造可穿戴电子徽章:ATmega32U4与WS2812B的硬件艺术实践
  • 大学生刚毕业,在上海初创四人公司学习嵌入式第三天
  • 告别英文界面焦虑:Axure RP中文语言包让原型设计更轻松
  • 别再问银行账户怎么建了!S/4 HANA Fiori版‘FI12’配置全流程指南
  • 英语学习之每日单词
  • 风光储能源电站远程监控可视化管理系统方案
  • Google Home Mini织物外壳DIY改造:从拆解到包裹的完整指南
  • FanControl终极指南:Windows上最强大的风扇控制软件完全解析
  • 保姆级教程:为PX4全驱无人机扩展MAVROS的actuator_control消息(从UORB到Mavlink全流程)
  • Spek频谱分析大文件卡顿?3种实用优化方法让分析速度提升200%
  • 在Windows任务栏实时监控全球股市:TrafficMonitor股票插件完整指南
  • 5V升压8.4V2A充电芯片:2A充电时电感饱和电流需大于4.5A
  • 量子神经网络回归新突破:对数比概率方法解决输出维度与梯度消失难题
  • Davinci工程实战:从零集成Flash Driver和Bootloader(基于PHPStudy环境模拟)