Skip to content

@wox/dayjs是前后端共享的package。前后端均可调用。

代码规范

  1. 所有关于日期,时间,时区,时间模式的处理方法都必须使用@wox/dayjs中的函数.
    1. 不要直接用js的Date,更不要用String
    2. 不要直接用dayjs. 用@wox/dayjs.这意味着项目代码中不会有直接import dayjs的情况。
    3. 不要直接在项目中用dayjs plugin. @wox/dayjs已经封装了我们需要的plugin
  2. 不要用String做date运算,或参数。传dayjs object。

时区

Dayjs自带时区plugin(dayjs.tz('Asia/Shanghai'))。

前端采用KBTimezoneSelect选择时区。选择时区组件增加了Outlook兼容的时区。

后端在处理Location时,需要将dayjs的时区设置为该Location的时区。处理方式为(暂时思路):

  1. 用Nestjs Middleware
  2. 根据current location设置dayjs,采用dayjs.UpdateLocale(${language}-location-${id}, ...dayjs.locale(language))
  3. request完成后重置dayjs.locale:${language}-location-${id}

parseZone - parse日期中的时区

时间模式

当需要计算"开放时段","时间模式","空间是否开放","工作时间","工作日"时,使用businessTimeManager用于计算开放时间。传入ITimeMode即可。

ts
timeModeEntity = {
  weekdays: DEFAULT_WORKING_HOURS,
  date_overrides: [],
}
businessTimeManager = new BusinessTimeManager(timeModeEntity)

DEFAULT_WORKING_HOURS代表周一到周五早九晚五。

关于ITimeMode具体参考时间模式

时间长度

Dayjs具有Durationplugin,显示和操作时间长度。我们增加了 duration(day1, day2)函数计算两个日期间的时间长度。

夏令时

isDST(day)用于判断是否该天是夏令时。(首先需要正确设置dayjs的时区)

每月的天数

daysInMonth用于计算每月的天数

星期

nameOfDay 返回周几的名称,可设置长或短名 weekdayNames 返回一周的名称数组

日期和时间显示格式

当需要把Dayjs或时间范围转化为String时(绝大多数情况下用于展示), 采用以下文档里的函数

https://ao5vs9kqus.feishu.cn/wiki/LgwbwZ2NIitnRQkVVOocztBHnih

formatXXX(day):

Last updated: