@ bimetal/ 时间
域中立 时间内核: 时区 - 认识日期 - 时间 算术
已命名模型( DST 安全) 民事 单位 addDays编号 :addWeeks编号 :addMonths编号 :addYears
- 明确 已过期 期限
addHours编号 :addMinutes时间范围、期限、, 颗粒分解和格式化。 无国籍,决定性,纯粹的功能. 外相依无相.
日历层(网格/分块/放出/轴几何、重现、 日历配置 + 域模型, 以及验证规则 )
@bimetal/calendar-core,它会再导出这个内核——日历边 消费者只需要一个进口。 规则评价是其自身的引擎:@bimetal/rule-engine+ 日历规则包@bimetal/calendar-rules。 。 。 .
安装
npm install @bimetal/temporal
里面的东西
时间模型
CalendarDateTime ——有时区上下文的点. 所有算术都发生在协调世界时,时区用于壁时判读.
import { createDateTime, addDays, daysBetween, getHours, isSameDay, Month } from '@bimetal/temporal';
const dt = createDateTime(2026, Month.March, 15, 9, 0, 'Europe/Berlin');
const tomorrow = addDays(dt, 1); // DST-safe: preserves wall-clock time
const days = daysBetween(dt, tomorrow); // calendar days, not epochMs/86400000
时间范围
import { createTimeRange, overlaps, durationInMinutes } from '@bimetal/temporal';
const range = createTimeRange(start, end); // throws if start >= end
const conflict = overlaps(rangeA, rangeB);
const mins = durationInMinutes(range); // length of the range, in minutes
颗粒度
import { snap, generateSlots } from '@bimetal/temporal';
const snapped = snap(dt, { minutes: 15 }, 'floor'); // 09:07 → 09:00
const slots = generateSlots(dayRange, { minutes: 15 }); // 96 slots for a 24h day
格式化
import { formatDateTime, formatDayLabel } from '@bimetal/temporal';
const stamp = formatDateTime(dt, { locale: 'de-DE' }); // locale-aware date-time
const label = formatDayLabel(dt, 'de-DE'); // locale-aware day label
网格/分块/放出/轴几何,日历配置(defaultConfig编号 :
mergeConfig),域模型(getDomain),并且验证已移至
@bimetal/calendar-core (+ 数) @bimetal/calendar-rules)在核心分块中——导入
他们从那里,而不是从 @bimetal/temporal。 。 。 .
关键设计决定
- 时间调整数字 :
{ epochMs, timezone }- 未来安全,DST安全 - 不可改变: 所有类型都是
readonly,所有函数返回新对象 - 零依赖关系: 仅
Intl.DateTimeFormat用于格式化 - 决定性: 可注射
Clock测试和安全部门改革