Skip to content

时间与时区约定

两类时间

类型字段示例存储API展示
瞬时createdTimepaidAtvoidedTimeMySQL DATETIME + 连接池时区ISO 8601(ZPC:formatDateTimeFromApi(浏览器/用户时区);业务日勿用
业务日历日bizDatelaborDate、筛选 dateFrom/dateTo同上ISO 或 YYYY-MM-DDformatBizYmdFromApi / ymdFromIso / valueYmdFromPath

业务时区

  • 默认 Asia/ShanghaiACC_BUSINESS_TIMEZONE,见 shared/utils/datetime.ts)。
  • 与 MySQL 连接默认 DATABASE_MYSQL_TIMEZONE=+08:00backend/.env.example)一致。
  • Acc 站点业务日、列表筛选区间均按业务时区理解,不要对 ISO 使用 slice(0, 10)

前端 / 小程序

  • 筛选 dateFrom / dateToformatAccBizDateLocal(设备本地日历日字符串)。
  • 过账 bizDateformatAccBizDateIso(完整 ISO 瞬时,含时分时保留)。
  • 列表业务日valueYmdFromPath(Web)、ymdFromIso(小程序)。
  • 系统日志等瞬时formatDateTimeFromApifrontend/src/shared/utils/datetime.ts)。

后端

  • 实现来源:@taskflow/shared/utils/datetime(与 Web/小程序同一文件);pnpm run build 前会执行 sharedbuild:backend-cjs 产出 Node 20 可用的 CJS。
  • 列表 dateFrom / dateTobizCalendarDayRange()backend/src/libs/shared/datetime/biz-calendar-day-range.ts),勿 new Date(ymd) + setHours
  • 首页趋势/本月:startOfBusinessMonthendOfTodayInTimeZone 等(同上 shared 模块)。

首轮落地(2026-05)

  • [x] Acc 业务日展示:formatBizYmdFromApi / ymdFromIso / valueYmdFromPath
  • [x] Acc 列表筛选:bizCalendarDayRange(后端各 dateFrom/dateTo
  • [x] 导出文件名:formatExportYmdStamp / formatExportYmdCompact
  • [x] 单元测试:backend/src/libs/shared/datetime/datetime.spec.ts

新代码自检

  • [ ] 新增 Acc 日期展示未使用 slice(0, 10) / toISOString().slice(0, 10)
  • [ ] 新增日期筛选使用 bizCalendarDayRange
  • [ ] 导出文件名中的日期用 formatExportYmdStamp / formatExportYmdCompact(业务时区),勿 toISOString().slice(0, 10)

TaskFlow 内部文档 Released under the MIT License.