moment、dayjs、date-fns 是三个较为广泛使用的时间库。
moment
简介
官网:momentjs.cn/
dayjs
简介
中文网:dayjs.fenxianglu.cn/ 一个轻量的处理时间和日期的 JavaScript 库
date-fns
简介
date-fns
是一个现代的 JavaScript
日期工具类库,提供了最全面、最简单和一致的工具集,用于在浏览器和 Node.js
中操作 JavaScript
日期。
功能特性
- 模块化:根据需求选择需要引用的模块
- 不可变:date-fns 使用纯函数构建,并且始终返回一个新的日期实例,而不是更改传递的日期实例。它允许防止错误并跳过长时间的调试会话
- 可信赖:遵循语义版本,始终向后兼容
- 快速:轻量快速,为用户提供最佳的使用体验
- TypeScript & Flow:date-fns 同时支持 Flow 和 TypeScript
示例
import {format, compareAsc} from 'date-fns/esm'
format(new Date(2014, 1, 11), 'MM/dd/yyyy')
//=> '02/11/2014'
const dates = [new Date(1995, 6, 2), new Date(1987, 1, 11), new Date(1989, 6, 10)]
dates.sort(compareAsc)
//=> [
// Wed Feb 11 1987 00:00:00,
// Mon Jul 10 1989 00:00:00,
// Sun Jul 02 1995 00:00:00
// ]
总结
moment、dayjs、date-fns三个库都能满足常见的需求,但是存在如下特点:
- moment 的功能强大但是体积也最大,moment.min.js 的体积为51K,dayjs.min.js 体积为7K,date-fns由于是模块化加载,体积可以最小化;
- dayjs 和 moment 的接口几乎完全一致,相互切换的学习成本极低,date-fns接口风格差异较大;
从功能上看,dayjs、date-fns 基本上可以替代moment,同时可以大幅减小app的体积。如果考虑的兼容性,可以优先考虑dayjs,喜欢模块化的朋友可以考虑date-fns。