Skip to content

chain

概述

chain() 是一个提供流畅(fluent)API 的日期操作类,封装了 date-manip 库的核心功能,支持链式调用和直观的日期操作。

快速上手

typescript
import { chain } from 'date-manip';

// 创建日期链实例
const now = chain(new Date());
const tomorrow = now.addDays(1);
console.log(tomorrow.format('YYYY-MM-DD')); // 输出:下一天的日期

核心功能

1. 链式操作

typescript
chain(new Date())
  .addMonths(2)
  .set('date', 15)
  .format('YYYY-MM-DD HH:mm:ss');

2. 时间单位操作

支持增减年、月、日、时、分、秒、毫秒等:

typescript
chain('2023-01-01')
  .addYears(1)       // 2024-01-01
  .addMonths(3)      // 2024-04-01
  .addDays(5)        // 2024-04-06
  .addHours(8);      // 时间增加8小时

3. 时间比较

typescript
const date1 = chain('2023-01-01');
const date2 = chain('2023-01-02');

date1.isBefore(date2); // true
date1.isSameOrAfter(date2); // false

API 参考

类方法

chain(input: ChainInput | IDateChain, format?: string): IDateChain

创建一个新的 DateChain 实例。

参数

  • input:日期来源(Datestringnumber 或另一个 DateChain 实例)
  • format(可选):输入字符串的日期格式(如 'YYYY-MM-DD'

属性与方法列表

日期增减操作

方法名描述
add(unit: Unit, val)增加任意时间单位(如 'year''month'
addDays(val: number)增加天数
addHours(val: number)增加小时
addMilliseconds(val: number)增加毫秒
addMinutes(val: number)增加分钟
addMonths(val: number)增加月份
addYears(val: number)增加年份
subtract(unit: Unit, val)减少任意时间单位
subDays(val: number)减少天数
subHours(val: number)减少小时
subMilliseconds(val: number)减少毫秒
subMinutes(val: number)减少分钟
subMonths(val: number)减少月份
subYears(val: number)减少年份

日期获取与设置

方法名描述
year([val: number])获取/设置年份
month([val: number])获取/设置月份(0-11)
date([val: number])获取/设置日期
hour([val: number])获取/设置小时
minute([val: number])获取/设置分钟
second([val: number])获取/设置秒
millisecond([val: number])获取/设置毫秒
time()获取时间戳(毫秒)

日期比较

方法名描述
isAfter(date: DateInput)判断是否晚于某个日期
isBefore(date: DateInput)判断是否早于某个日期
isSame(date: DateInput)判断是否与某个日期相等
isSameOrAfter(date: DateInput)判断是否等于或晚于某个日期
isSameOrBefore(date: DateInput)判断是否等于或早于某个日期
isBetween(start: DateInput, end: DateInput)判断是否在两个日期之间
isValid()检查日期是否有效(非 Invalid Date

日期格式化与转换

方法名描述
format(pattern: string)格式化日期为字符串(如 'YYYY-MM-DD HH:mm:ss'
toISOString()转换为 ISO 8601 格式字符串
toDate()转换为原生 Date 对象
clone()创建当前日期的副本

日期范围操作

方法名描述
startOf(unit: Unit)将日期设置为指定时间单位的开始(如 startOf('day') 设置为当天 00:00)
endOf(unit: Unit)将日期设置为指定时间单位的结束(如 endOf('month') 设置为月末 23:59:59)
diff(date: DateInput, unit?: Unit)计算与另一个日期的差异(返回数值,可指定单位)
diffInDays()计算与另一个日期的天数差异
diffInMonths()计算与另一个日期的月份差异
diffInYears()计算与另一个日期的年份差异

其他实用方法

方法名描述
dayOfYear()获取一年中的第几天(1-366)
daysInMonth()获取当前月份的天数(如 28-31)
isLeapYear()判断是否为闰年
toArray()转换为 [year, month, date, hours, minutes, seconds, milliseconds] 数组

使用示例

示例 1:日期增减与格式化

typescript
const date = chain('2023-01-01');
const result = date
  .addMonths(2)       // 2023-03-01
  .addDays(5)         // 2023-03-06
  .format('YYYY-MM-DD');
console.log(result); // 输出:2023-03-06

示例 2:时间比较

typescript
const dateA = chain('2023-01-01');
const dateB = chain('2023-01-02');

dateA.isBefore(dateB); // true
dateB.isAfter(dateA);  // true

示例 3:获取时间值

typescript
const now = chain();
console.log(now.year());     // 当前年份
console.log(now.hour());     // 当前小时

示例 4:日期差异计算

typescript
const start = chain('2023-01-01');
const end = chain('2023-01-10');
console.log(end.diffInDays(start)); // 输出:9

示例 5:日期范围操作

typescript
const date = chain('2023-01-15');
date.startOf('month'); // 2023-01-01 00:00:00
date.endOf('month');   // 2023-01-31 23:59:59.999