Appearance
@wox/dayjs是前后端共享的package。前后端均可调用。
代码规范
- 所有关于日期,时间,时区,时间模式的处理方法都必须使用
@wox/dayjs中的函数.- 不要直接用js的Date,更不要用String
- 不要直接用
dayjs. 用@wox/dayjs.这意味着项目代码中不会有直接import dayjs的情况。 - 不要直接在项目中用dayjs plugin.
@wox/dayjs已经封装了我们需要的plugin
- 不要用String做date运算,或参数。传dayjs object。
时区
Dayjs自带时区plugin(dayjs.tz('Asia/Shanghai'))。
前端采用KBTimezoneSelect选择时区。选择时区组件增加了Outlook兼容的时区。
后端在处理Location时,需要将dayjs的时区设置为该Location的时区。处理方式为(暂时思路):
- 用Nestjs Middleware
- 根据current location设置dayjs,采用dayjs.UpdateLocale(
${language}-location-${id}, ...dayjs.locale(language)) - 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):