Skip to content

时间与时区约定 ​

两类时间 ​

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

业务时区 ​

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

前端 / 小程序 ​

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

后端 ​

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

已统一(✅,2026-05 首轮落地) ​

  • ✅ Acc 业务日展示:formatBizYmdFromApi / ymdFromIso / valueYmdFromPath
  • ✅ Acc 列表筛选:bizCalendarDayRange(后端各 dateFrom/dateTo)
  • ✅ 导出文件名:formatExportYmdStamp / formatExportYmdCompact
  • ✅ 单元测试: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.