自然语言日期(chrono-node)
灵感:能力工具箱 chrono-date(pkg: chrono-node)。
把跟进备注里的口语时间(如「下周五下午三点」「后天上午」)解析为 Date,用于预约跟进、日历写入,本地完成、不请求后端。
何时使用
- 粘贴/输入「明天下午三点跟进」类文本
- 快速填跟进时间,不想手点日期面板
- 需要中文相对日期(昨天/今天/明天/下周)
硬约束
- 依赖
chrono-node;中文场景使用中文 locale(如zh解析器),不要只用默认英文。 - 解析失败返回
{ ok: false, reason },禁止静默写成Invalid Date。 - 以「参考时刻」
refDate(默认new Date())解释相对词;时区用运行环境本地时区并在 UI 标明。 - 多段匹配时优先取第一条或让用户确认;结果同时给
iso与可读文案。 - 不发起网络请求;不把整段聊天上传第三方。
推荐实现要点
import * as chrono from 'chrono-node'
/** 中文优先;若包版本导出不同,改为项目文档推荐的 zh 入口 */
const zh = (chrono as any).zh?.casual || chrono.casual
export function parseFollowWhen(
text: string,
refDate: Date = new Date(),
): { ok: true; date: Date; iso: string; text: string } | { ok: false; reason: string } {
const hit = zh.parse(text.trim(), refDate, { forwardDate: true })[0]
if (!hit) return { ok: false, reason: '未识别到时间表达' }
const date = hit.start.date()
if (Number.isNaN(date.getTime())) return { ok: false, reason: '时间无效' }
return {
ok: true,
date,
iso: date.toISOString(),
text: hit.text,
}
}
// 示例:parseFollowWhen('下周五下午三点提醒我')
Agent 步骤
- 接入
chrono-node中文解析,封装parseFollowWhen。 - 自测:「明天」「下周五下午三点」「3天后」;无时间句应失败。
- UI:解析成功写入日期时间控件,并展示「已识别:xxx」。
附加
- README.md · reference.md · templates/usage.md