@edtf-ts/core

中文文档
0.6.0发布于 2026/09/06MITTypeScriptESM + CJS零依赖近 30 天下载 4556

具有时间推理的扩展日期/时间格式的现代类型脚本执行

中文使用文档
文档目录17 节
  1. 从0.5.0升至0.6.0
  2. 为什么是EDTF?
  3. 特征
  4. 本地化输出
  5. 安装
  6. 快速启动
  7. EDTF 规格支持
  8. 0级(ISO 8601简介)
  9. 1级(延长)
  10. 第二级(部分不确定性)
  11. 契约年和清单
  12. 比较中的真理值
  13. 文档
  14. 相关软件包
  15. 许可证
  16. 捐款
  17. 互通性简介

@edtf-ts/core - EDTF 类型脚本和模糊日期

日期,人类的平面

npm version License: MIT

现代类型脚本执行 扩展日期/时间格式( EDTF) 与时间推理,模糊的日期比较,以及人可读格式化.

添加 核心业务 提供单词拼写、大年范围、有标记的有限度/开放/未知界限、懒惰的数值计数以及所有关系摘要。 现有 FuzzyDate 方法和收集阵列仍然可用。 重要数字界限现在涵盖所显示的范围(1950S2 表示1900-1999年);无效的数字计数被否决.

GitHub 仓库 | 文档 | 交互式播放场

从0.5.0升至0.6.0

现有的出口品仍然可用。 现有呼叫者面临的主要风险是:

  • 日期间隔终点被拒绝. 使用 FuzzyDate.from() 或者说 parse() 用于处理验证失败。 独立 Date.toISOString() 时间戳在默认情况下仍然被接受;毫秒被保存在边框和ISO输出中. 严格模式排除分数秒.
  • compare() 编号 : .compareTo() 现在返回 number | 'UNKNOWN';数字任务和直接排序回调可能需要TypeScript守护.
  • sort(), (中文(简体) ), earliest(), (中文(简体) ), latest(),以及 FuzzyDate.compare() 当将时间区合格时间戳与日历日期或无时区日期相混合时会扔出.

这个 移徙指南 解释安全适应,结果类型变化,以及高级关系回调. 更新 @edtf-ts/natural 同时,如果你使用它.

为什么是EDTF?

人们不会像电脑那样经历时间。 我们记得 季节, (中文(简体) ), 时代,以及 大约瞬间。我们说"左右","前","后","有时之间"

但大多数软件坚持 刚性ISO 8601日期迫使人类假装知道更多 当软件只接受确切的日期时,用户被迫猜测、发明或留下空白-丢失有价值的信息.

EDTF之所以存在,是因为实时是杂乱无章的——并且假装否则会丢失信息.

特征

  • 模糊数据 API - 与 IDE 自动完成的基于方法的临时启发接口
  • 紧急信托基金 0、1和2级 - 用与来源相联的符合物进行严格剖面验证
  • 类型脚本第一 - 歧视工会的完整安全
  • 艾伦的间隔代数 - 13个具有四等逻辑的时间关系
  • 可读格式 - 英语、西班牙语和法语短语,包括限定词、汇编、季节和年龄
  • 零运行时间依赖关系 -轻而易举
  • BigInt 支持 - 处理超过JavaScript极限的极端历史日期
  • 树能震动 - 只导入你需要的东西

本地化输出

import { FuzzyDate } from '@edtf-ts/core';

const date = FuzzyDate.parse('1870-03-12');
date.format({ locale: 'es-ES' }); // '12 de marzo de 1870'
date.format({ locale: 'fr-FR' }); // '12 mars 1870'

默认为 en-US。当通过一个语言 @edtf-ts/natural,确保其语言符合输入,或设置 language 当然 这个 游乐场 以您的浏览器语言开始, 并为所有解析和渲染提供一个顶级覆盖 。 见 移徙指南 用于兼容性细节.

安装

npm install @edtf-ts/core
# or
pnpm add @edtf-ts/core
# or
yarn add @edtf-ts/core

快速启动

import { FuzzyDate } from '@edtf-ts/core';

// Parse EDTF strings into FuzzyDate objects
const date = FuzzyDate.parse('1985-04-12');
const interval = FuzzyDate.parse('2004-06/2006-08');
const uncertain = FuzzyDate.parse('1984?');
const decade = FuzzyDate.parse('198X'); // Any year 1980-1989

// Method-based API with IDE autocomplete
date.format(); // "April 12, 1985"
date.isBefore(interval); // 'YES'
uncertain.isUncertain; // true
decade.hasUnspecified; // true

// Temporal comparison with four-valued logic
const a = FuzzyDate.parse('1985');
const b = FuzzyDate.parse('1990');

a.isBefore(b); // 'YES' - definitely before
a.during(b); // 'NO' - not contained within
a.overlaps(b); // 'NO' - no time overlap

// Handle uncertainty honestly
const year = FuzzyDate.parse('1985');
decade.equals(year); // 'MAYBE' - could be 1985

// Boolean convenience methods for when you need true/false
a.isDefinitelyBefore(b); // true
decade.isPossiblyBefore(year); // true (could be 1980-1984)

EDTF 规格支持

0级(ISO 8601简介)

  • 日历日期: 1985-04-12
  • 精度降低: 1985-04, (中文(简体) ), 1985
  • 日期/时间: 1985-04-12T23:20:30
  • 间隔 : 1985/1990, (中文(简体) ), 1985-04-12/1985-04-15

1级(延长)

  • 不确定/近似值 : 1984?, (中文(简体) ), 1984~, (中文(简体) ), 1984%
  • 未指定数字 : 199X, (中文(简体) ), 19XX, (中文(简体) ), 1985-XX-XX
  • 延长间隔 : 1984?/2004~, (中文(简体) ), ../1985, (中文(简体) ), 1985/..
  • 超过 4 位数 : Y170000002
  • 季节: 1985-21 (春天), 1985-22 (夏季)

第二级(部分不确定性)

  • 构成部分级资格: ?2004-06, (中文(简体) ), 2004-~06, (中文(简体) ), 2004-06-~11
  • 未说明的部分: 156X-12-25, (中文(简体) ), 15XX-12-25
  • 设置/列表 : [1985,1990,1995], (中文(简体) ), {1985-04,1985-05}
  • 延长季节 : 1985-25 (温特,北部)

契约年和清单

compactYearRanges(parsedValue) 返回压缩 EDTF 如 [1667..1668,1670..1672] 从 [1667,1668,1670,1671,1672]。它按现有顺序合并相邻的确切年份,保留空白、重复、打开界限和设置/列表含义。 其他精确度和合格年限仍然分开。 原始解析对象及其 edtf 保持不变.

formatHuman 使用英文、西班牙文和法文的简明年限。 譬如说, [1870..1880] 作为 One of: 1870 through 1880, (中文(简体) ), Una de estas fechas: 1870 a 1880,或 Une de ces dates: 1870 à 1880。 。 。 .

比较中的真理值

比较方法使用四分法逻辑进行精确的时间推理:

  • 对 - 关系肯定存在
  • 无 - 关系绝对没有
  • 也许 - 关系可能存在(由于不精确而不确定)
  • 不详 - 无法确定(缺少信息)
const y1980 = FuzzyDate.parse('1980');
const y1990 = FuzzyDate.parse('1990');
const decade = FuzzyDate.parse('198X');

y1980.isBefore(y1990); // 'YES' - bounds prove it
decade.equals(y1985); // 'MAYBE' - could be 1985

// Boolean convenience methods
y1980.isDefinitelyBefore(y1990); // true
decade.isPossiblyBefore(y1985); // true

文档

完整的文件可在 bibpritchett.github.io/edtf-ts (英语)

许可证

麻省理工学院版权2025 Bob Pritchett

捐款

欢迎捐款! 见 GitHub 仓库 详细情况.

互通性简介

parse(input, { level: 2, conformance: 'strict' }), (中文(简体) ), isValid,以及 FuzzyDate.from 编号 : FuzzyDate.parse 支持严格的互操作性配置 。 扩展支持是默认的 。 季节间隔终点是支持的延伸;严格的模式不包括季节终点,季节收集会员,以及合格的季节. 合格的日历日期收藏成员仍然得到支持。 人类格式化保留了明确的计数/范围结构,包括月/日范围. 见 互操作性和迁移。 。 。 .

版本与发布记录

@edtf-ts/core 共发布 8 个版本,首次发布于 2026/01/06;过去 12 个月发布了 8 个版本。

版本发布日期距今
0.6.0latest2026/09/062 个月前
0.5.02026/06/105 个月前
0.4.22026/01/209 个月前
0.4.12026/01/1110 个月前
0.4.02026/01/1110 个月前
0.3.02026/01/0910 个月前

关于 @edtf-ts/core 的常见问题

@edtf-ts/core 是什么?

具有时间推理的扩展日期/时间格式的现代类型脚本执行

如何安装 @edtf-ts/core?

在项目目录运行 npm install @edtf-ts/core,或使用 pnpm add / yarn add / bun add。

@edtf-ts/core 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@edtf-ts/core 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@edtf-ts/core 可以商用吗?

@edtf-ts/core 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@edtf-ts/core 的下载量有多少?

根据 npm 官方下载统计,@edtf-ts/core 在 2026/10/13 – 2026/11/11 这 30 天内被下载 4,556 次,日均约 152 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@edtf-ts/core 还在维护吗?

最新版本 0.6.0 发布于 2026/09/06(2 个月前);至今共发布 8 个版本,其中过去 12 个月发布了 8 个;首次发布于 2026/01/06。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。