Skip to content

API 参考 ​

功能总览 ​

本版本共 4 个函数 + 2 种调用方式,均为纯函数、非法入参回退默认值而非抛异常、 sideEffects: false 可 tree-shaking:

分类API一句话说明
格式化format旧版调用约定(偏移字符串 + 模板),完全兼容
年月信息getYearLastDays今年剩余天数(不含今天)
getYearofDays指定年份总天数(365/366)
getDays指定年月的天数(28/29/30/31)
调用方式datefmt冻结命名空间(只导入一个标识符)
DateFmt / datefmt.create不可变链式建造者(Builder 模式)

所有函数既可具名导出调用,也可通过 datefmt 命名空间调用(如 datefmt.getDays),行为完全一致。


一、格式化 ​

format(a?, b?) ​

格式化日期时间,完全兼容旧工具调用约定。

参数类型说明
astring(可选)偏移字符串或格式化模板
bstring(可选)格式化模板(与 a 同时传入时,a 只按偏移解析)

返回:格式化后的字符串。

调用形式:

调用语义
format()当前时间,默认模板 'YYYY-MM-DD hh:ii:ss'
format(pattern)当前时间按模板格式化
format(offset, pattern)相对今天偏移 N 天后按模板格式化

偏移字符串规则:/^\s*[+-]?\d+\s*$/,如 '-7'、'0'、'+3'、' -7 '; 仅平移日期、保留当天时分秒。非法输入不抛错:无法识别的参数按模板处理。

完整 Token 表见格式化 Token。本版本共 16 个基础 Token, 不含毫秒 / 季度 / 周数 / 时间戳等扩展 Token,也不支持 [方括号] 转义。


二、年月信息 ​

函数参数返回说明
getYearLastDays()无number今年剩余天数(不含今天;今天 12-31 时返回 0)
getYearofDays(year?)number | stringnumber指定年份总天数(闰年 366,平年 365);省略或非法时回退今年
getDays(date?)string | Datenumber指定年月的天数;支持 'YYYY-MM'、'YYYY-MM-DD' 及斜杠变体与 Date,只取年月;省略或非法时回退本月

三个方法均不抛错:无参时一律以"今天"为基准;非法入参回退默认值。

getYearLastDays() ​

今年剩余天数(不含今天)。即"今年 12 月 31 日零点"与"今天零点"的日序号差:

ts
// 假设今天是 2023-03-10
getYearLastDays()                     // 296
getYearofDays() - getYearLastDays()   // 69(今年已过去)

getYearofDays(year?) ​

指定年份的总天数(365 / 366)。year 支持 number(如 2024)或纯数字字符串(如 '2024'):

ts
// 假设今年是 2023
getYearofDays()        // 365
getYearofDays('2022')  // 365
getYearofDays(2024)    // 366
getYearofDays('abc')   // 365(回退今年,不抛错)

getDays(date?) ​

指定日期所在月份的天数(28 / 29 / 30 / 31)。date 支持 'YYYY-MM'、'YYYY-MM-DD'、'YYYY/MM'、'YYYY/MM/DD' 与 Date 对象,只取年月、忽略日部分:

ts
// 假设本月是 2023-03
getDays()              // 31(本月)
getDays('2023-02')     // 28
getDays('2024-02-15')  // 29(只取年月)
getDays('2023/02')     // 28(斜杠兼容)
getDays('abc')         // 31(回退本月,不抛错)

TIP

本版本没有 isLeapYear,判断闰年可用 getYearofDays(year) === 366。


datefmt 命名空间(Facade) ​

ts
import { datefmt } from '@iefe/dateformat'

本版本全部函数都收拢在 datefmt 上,与具名导出同源同行为:

成员说明
datefmt.format(a?, b?)同 format
datefmt.getDays(date?)同 getDays
datefmt.getYearofDays(year?)同 getYearofDays
datefmt.getYearLastDays()同 getYearLastDays
datefmt.create(pattern?)创建不可变建造者 DateFmt
ts
datefmt.format('-7', 'YYYY-MM-DD')   // '2023-03-03'
datefmt.getDays('2024-02')           // 29

datefmt 经 Object.freeze 冻结:运行时(ESM 恒为严格模式)改写任何属性都会抛 TypeError,杜绝被下游挂载/篡改。

DateFmt 建造者(Builder) ​

不可变实现:所有配置存于私有快照,链式方法每步返回新实例,实例间无状态串扰。

ts
declare class DateFmt {
  static create(pattern?: string): DateFmt
  pattern(pattern: string): DateFmt
  offset(days: number | string): DateFmt
  base(date?: Date): DateFmt
  render(): string
  toString(): string
}
方法说明
DateFmt.create(pattern?)工厂方法;pattern 默认 'YYYY-MM-DD hh:ii:ss'
.pattern(pattern)换模板,返回新实例
.offset(days)偏移天数(可叠加:.offset(-7).offset('+3') 净偏移 -4);仅平移日期、保留时分秒;非法参数忽略不抛错
.base(date?)注入基准时间;本版本格式化"非今天"日期的唯一途径;非法值回退当前时间
.render()产出字符串;延迟求值,调用时才读系统时间
.toString()render() 的别名,可用于模板字符串 `${builder}`
ts
// 假设当前时间 2023-03-10 15:00:00
datefmt.create('YYYY-MM-DD hh:ii:ss').offset(-7).render()
// '2023-03-03 15:00:00'

// 格式化给定日期(本版本无 formatDate)
datefmt.create('YYYY-MM-DD').base(new Date(2024, 1, 29)).render()
// '2024-02-29'

公共类型 ​

ts
/** 年份入参:支持数字或纯数字字符串(如 2024 / '2024') */
type YearInput = number | string

/** 日期入参:支持 'YYYY-MM'、'YYYY-MM-DD' 及斜杠变体(允许带时间部分)或 Date 对象 */
type DateInput = string | Date

错误处理约定 ​

本库为纯函数风格,公开 API 不抛异常:非法入参一律回退默认值 (当前时间 / 本月 / 今年),保证总有返回值。

唯一会抛错的是对 datefmt 冻结命名空间的改写(TypeError)。

模块产物 ​

产物路径说明
ESMdist/index.jsimport 引入
CJSdist/index.cjsrequire 引入
类型dist/index.d.tsTypeScript

sideEffects: false,支持 tree-shaking;无 UMD 产物。


TIP

2.1.0 新增 formatDate、parseDate / isValid、fromNow / diff、 isToday 等比较函数、isLeapYear 与六个扩展 Token,见 2.1.0 API 参考。

本站由 VitePress 静态生成,各版本文档相互独立。