Date-fns

2024-06-21 20:59:49 259
Date-fns 是一个现代化的 JavaScript 日期处理库,它提供了大量的日期处理函数,功能全面且易于使用。与其他日期处理库(如 Moment.js)相比,Date-fns 更加轻量且模块化,支持 tree shaking,使得它在现代前端开发中备受青睐。

主要特点和功能

  1. 模块化: 每个函数都是独立的模块,可以按需加载,支持 tree shaking。
  2. 丰富的功能: 提供了超过 130 个函数,用于各种日期操作,如格式化、解析、比较、计算等。
  3. 性能优越: 设计上注重性能,确保函数执行速度快。
  4. 现代化: 使用现代化的 JavaScript 语法和特性,兼容 ES6+。
  5. 国际化支持: 支持多种语言和地区格式,提供了丰富的国际化功能。
  6. Immutable: 所有函数都是不可变的,不会改变原始日期对象。
  7. 类型安全: 提供了 TypeScript 类型定义文件,增强类型安全性。
  8. 轻量级: 相较于 Moment.js,Date-fns 更加轻量,减少了最终打包的大小。
  9. 简单易用: API 设计简单,易于理解和使用。
  10. 社区支持: 拥有活跃的社区和丰富的资源,方便学习和交流。

使用场景

Date-fns 适用于各种需要日期处理的场景,特别是在需要高性能和轻量级解决方案的项目中:

  • 日期格式化: 格式化日期为各种字符串格式。
  • 日期解析: 解析字符串为日期对象。
  • 日期计算: 进行日期加减操作,如增加天数、月份、年份等。
  • 日期比较: 比较日期的先后关系。
  • 日期国际化: 处理不同语言和地区的日期格式。

核心概览

Date-fns 的核心设计理念是提供一个现代化、模块化且高性能的日期处理库,使得日期操作变得简单、高效和可靠。其核心组件包括:

  • 模块化函数: 每个函数都是独立的模块,可以按需加载。
  • 丰富的日期操作函数: 提供了各种常见的日期操作函数,如格式化、解析、比较、计算等。
  • 国际化支持: 提供了多种语言和地区格式的支持。

安装

可以通过 npm 或 yarn 安装 Date-fns:

使用 npm 安装

npm install date-fns

使用 yarn 安装

yarn add date-fns

基本用法

以下是一些基本的 Date-fns 示例,展示了如何使用 Date-fns 处理日期和时间:

引入 Date-fns

const { format, addDays, parseISO } = require('date-fns');
// 或者使用 ES6 模块
import { format, addDays, parseISO } from 'date-fns';

日期格式化

const date = new Date(2024, 5, 14);
const formattedDate = format(date, 'yyyy-MM-dd');
console.log(formattedDate); // 2024-06-14

日期解析

const dateString = '2024-06-14';
const parsedDate = parseISO(dateString);
console.log(parsedDate); // Fri Jun 14 2024 00:00:00 GMT+0000 (Coordinated Universal Time)

日期计算

const today = new Date();
const nextWeek = addDays(today, 7);
console.log(nextWeek); // 当前日期加上 7 天后的日期

日期比较

const date1 = new Date(2024, 5, 14);
const date2 = new Date(2024, 5, 20);
const isBefore = isBefore(date1, date2);
console.log(isBefore); // true

高级用法

复杂日期计算

const startDate = new Date(2024, 5, 14);
const endDate = addMonths(startDate, 3);
console.log(endDate); // 当前日期加上 3 个月后的日期

国际化

import { format } from 'date-fns';
import { fr } from 'date-fns/locale';

const date = new Date(2024, 5, 14);
const formattedDate = format(date, 'PPP', { locale: fr });
console.log(formattedDate); // 14 juin 2024

时间间隔计算

import { differenceInDays } from 'date-fns';

const date1 = new Date(2024, 5, 14);
const date2 = new Date(2024, 5, 20);
const daysDifference = differenceInDays(date2, date1);
console.log(daysDifference); // 6

常用 API 说明

格式化

  • format(date, formatString, [options]): 格式化日期为指定的字符串格式。
  • formatDistance(date, baseDate, [options]): 格式化日期之间的距离。

解析

  • parse(dateString, formatString, referenceDate, [options]): 解析字符串为日期对象。
  • parseISO(dateString, [options]): 解析 ISO 字符串为日期对象。

计算

  • addDays(date, amount): 在日期上增加指定天数。
  • addMonths(date, amount): 在日期上增加指定月份数。
  • subDays(date, amount): 在日期上减去指定天数。
  • subMonths(date, amount): 在日期上减去指定月份数。

比较

  • isBefore(date, dateToCompare): 判断一个日期是否在另一个日期之前。
  • isAfter(date, dateToCompare): 判断一个日期是否在另一个日期之后。
  • isEqual(date, dateToCompare): 判断两个日期是否相等。

其他

  • differenceInDays(dateLeft, dateRight): 计算两个日期之间的天数差异。
  • differenceInMonths(dateLeft, dateRight): 计算两个日期之间的月份差异。
  • endOfDay(date): 返回指定日期的结束时间(23:59:59)。
  • startOfDay(date): 返回指定日期的开始时间(00:00:00)。

官方资源