@edtf-ts/core - EDTF 类型脚本和模糊日期
日期,人类的平面
现代类型脚本执行 扩展日期/时间格式( EDTF) 与时间推理,模糊的日期比较,以及人可读格式化.
添加 核心业务 提供单词拼写、大年范围、有标记的有限度/开放/未知界限、懒惰的数值计数以及所有关系摘要。 现有 FuzzyDate 方法和收集阵列仍然可用。 重要数字界限现在涵盖所显示的范围(1950S2 表示1900-1999年);无效的数字计数被否决.
从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 (英语)
相关软件包
- @ edtf- ts/ 自然 - 自然语言日期分析(“1950年简历”,“1985年1月初”)
许可证
麻省理工学院版权2025 Bob Pritchett
捐款
欢迎捐款! 见 GitHub 仓库 详细情况.
互通性简介
parse(input, { level: 2, conformance: 'strict' }), (中文(简体) ), isValid,以及 FuzzyDate.from 编号 : FuzzyDate.parse 支持严格的互操作性配置 。 扩展支持是默认的 。 季节间隔终点是支持的延伸;严格的模式不包括季节终点,季节收集会员,以及合格的季节. 合格的日历日期收藏成员仍然得到支持。 人类格式化保留了明确的计数/范围结构,包括月/日范围. 见 互操作性和迁移。 。 。 .