@bimetal/temporal

中文文档
0.42.0发布于 2026/10/30Apache-2.0TypeScriptES Module零依赖近 30 天下载 1.2万

Domain-neutral temporal kernel: time model, durations, grid resolution, formatting. Shared across all BIMETAL component families.

原始使用文档
文档目录6 节
  1. Installation
  2. What's Inside
  3. Time Model
  4. Granularity
  5. Formatting
  6. Key Design Decisions

@bimetal/temporal

The domain-neutral temporal kernel: timezone-aware date-time arithmetic in two named models (DST-safe civil units addDays/addWeeks/addMonths/addYears

  • explicit elapsed durations addHours/addMinutes), time ranges, durations, granularity snapping, and formatting. Stateless, deterministic, pure functions. Zero external dependencies.

The calendar layer (grid/segmentation/layout/axis geometry, recurrence, the calendar config + domain model, and the validation rules) lives in @bimetal/calendar-core, which re-exports this kernel — a calendar-side consumer needs only that one import. Rule evaluation is its own engine: @bimetal/rule-engine + the calendar rule pack @bimetal/calendar-rules.

Installation

npm install @bimetal/temporal

What's Inside

Time Model

CalendarDateTime — a point in time with timezone context. All arithmetic happens in UTC, timezone is used for wall-clock interpretation.

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

TimeRange

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

Granularity

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

Formatting

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

Grid/segmentation/layout/axis geometry, the calendar config (defaultConfig/ mergeConfig), domain models (getDomain), and validation moved to @bimetal/calendar-core (+ @bimetal/calendar-rules) in the core split — import them from there, not from @bimetal/temporal.

Key Design Decisions

  • Temporal-aligned: { epochMs, timezone } — future-proof, DST-safe
  • Immutable: all types are readonly, all functions return new objects
  • Zero dependencies: only Intl.DateTimeFormat for formatting
  • Deterministic: injectable Clock for tests and SSR

版本与发布记录

@bimetal/temporal 共发布 8 个版本,首次发布于 2026/07/26;过去 12 个月发布了 8 个版本。

版本发布日期距今
0.42.0latest2026/10/309 天前
0.41.02026/10/2415 天前
0.40.02026/10/1128 天前
0.39.02026/10/061 个月前
0.38.02026/10/041 个月前
0.37.02026/09/131 个月前

关于 @bimetal/temporal 的常见问题

@bimetal/temporal 是什么?

Domain-neutral temporal kernel: time model, durations, grid resolution, formatting. Shared across all BIMETAL component families.

如何安装 @bimetal/temporal?

在项目目录运行 npm install @bimetal/temporal,或使用 pnpm add / yarn add / bun add。

@bimetal/temporal 支持 TypeScript 吗?

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

@bimetal/temporal 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@bimetal/temporal 可以商用吗?

@bimetal/temporal 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@bimetal/temporal 的下载量有多少?

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

@bimetal/temporal 还在维护吗?

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