日期范围字段时区逻辑优化
版本:V0.1 | 创建日期:2026-07-12
需求来源:CRM 需求池
2026-05-09-21202、设计截图/交互说明、用户沟通、本地代码核对优先级:P1
文档状态:待确认
需求变更记录
| 变更日期 | 变更人 | 变更内容 |
|---|
依赖需求 Story 列表
| ID | 需求描述 | 涉及端与开发人员 | 是否有依赖项 | 备注 |
|---|---|---|---|---|
1154330609001400978 | 时间和日期范围这两个字段的时区逻辑优化 | PaaS 业务平台部,具体负责人待确认 | 是 | 需求池已关联 TAPD Story;本期需确认日期范围组字段的前后端、数据转换和日志查询改造范围。 |
一、需求概述
1.1 客户反馈
客户反馈结论: 无关联客户反馈。该需求来自内部多时区验证与日志业务场景复盘,需求池当前挂载反馈数为 0。
| 需求编号 | 反馈客户 | 客户级别 | 反馈人 | 业务场景 |
|---|---|---|---|---|
2026-05-09-21202 | -- | -- | -- | 内部验证发现日期范围在跨时区查看时发生跨日;日志归属日期随之错误。 |
1.2 系统现状
日期范围组件存在“显示时间”配置,但当前该配置只影响展示形态,未决定时区处理语义。

显示时间=是时,字段展示为两个日期时间端点,代表确定的时间区间。东十区创建2026-07-12 00:00 ~ 2026-07-13 23:59,东八区查看为2026-07-11 22:00 ~ 2026-07-13 21:59,符合实际时刻按查看人时区换算的预期。显示时间=否时,字段展示为两个日期,业务上代表自然日范围。但同一条数据从东十区切换到东八区后,2026-07-12 ~ 2026-07-13错误显示为2026-07-11 ~ 2026-07-13。
| 东十区创建 | 东八区查看 |
|---|---|
![]() | ![]() |
问题根因是无时间的日期范围仍将开始、结束日期按 00:00 与 23:59 两个时间点参与个人时区转换。对东十区到东八区而言,开始端点被回拨至前一天,造成日期范围和其承载的业务含义错位。
日志预设对象的“日志开始日期”“日志结束日期”使用标准日期范围字段,用于表达日志归属日或汇报周期。以每日日志为例,列表“时间”列显示 2026年06月15日,但开始/结束日期显示 2026-06-14 ~ 2026-06-15,已造成归属日期不一致。

本地代码依据:对象数据的通用时区转换按对象描述取日期字段集合后统一调用 convertDateValueToSystem / convertDateValueToCustom,需要让无时间的日期范围子字段退出该转换链路。参考 [ObjectDataExt.java](/Users/soren/Desktop/work/fs-paas-appframework/fs-paas-app-metadata-util/src/main/java/com/facishare/paas/appframework/metadata/ObjectDataExt.java:3390)。Web 筛选已有普通日期和日期时间的分流处理,但日期范围尚需按“是否显示时间”补齐明确分流。参考 [utils.js](/Users/soren/Desktop/work/vui/src/components/filters/utils.js:157)。
1.3 竞品现状
无。本期是字段数据语义与现有多时区模型的兼容改造,不依赖竞品结论。
1.4 产品价值
- 让“日期范围”稳定表达业务归属日期、有效期和汇报周期,不因用户所在地改变而跨日。
- 保留“日期时间范围”对跨地区协同的正确支持,避免为修复日期范围而破坏真实时刻的换算。
- 修复日志列表中汇报周期与日志开始/结束日期不一致的问题,使筛选、统计和展示使用同一归属日期口径。
1.5 需求目标
- 日期范围组件根据“显示时间”配置决定数据语义:显示时间时按日期时间范围处理;不显示时间时按自然日期范围处理。
- 无时间的日期范围在新建、编辑、详情、摘要、列表、筛选、导入导出和开放接口中均不参与个人时区转换。
- 日志开始日期、日志结束日期始终反映日志实际归属日/汇报周期,与列表“时间”列保持一致,不因查看人时区提前一天。
1.6 范围与非目标
| 类型 | 内容 |
|---|---|
| 本期范围 | 标准日期范围组件;显示时间 配置的前后端数据处理;日志预设对象的开始/结束日期;相关对象详情、摘要、列表、筛选、导入导出、接口和统计口径。 |
| 非目标范围 | 不改变普通日期字段的现有无时区语义;不改变时间字段的固定时差展示逻辑;不将无时间日期范围改造成可选时区的日期时间范围。 |
二、产品方案
2.1 整体产品方案
将“显示时间”从纯展示配置升级为日期范围组件的数据语义配置。
显示时间=是:字段定义为“日期时间范围”。开始和结束值是实际时刻,创建、编辑、读取时按用户时区换算;换算使用地区时区规则,包含夏令时----参考日期时间字段的处理逻辑显示时间=否:字段定义为“日期范围”。开始和结束值是自然日期,不是00:00、23:59两个时刻;任何端和任何用户时区均不得转换日期。---参考日期字段的处理逻辑,没有时区概念
flowchart TD
A[读取日期范围组件配置] --> B{显示时间是否为是}
B -->|是| C[日期时间范围]
C --> D[按用户时区写入和读取]
D --> E[按地区时区规则处理夏令时]
B -->|否| F[日期范围]
F --> G[按自然日期读写]
G --> H[不进入个人时区转换]
H --> I[日志归属日期保持一致]
2.2 具体方案说明
2.2.1 字段定义与显示规则
| 配置 | 对外字段名称 | 数据语义 | 展示规则 | 时区规则 |
|---|---|---|---|---|
显示时间=是 | 日期时间范围 | 两个实际时刻 | 展示日期与时分,例如2026-07-11 22:00 ~ 2026-07-13 21:59 | 参与个人时区转换;按地区时区规则处理夏令时。 |
显示时间=否 | 日期范围 | 两个自然日期,首尾均包含 | 仅展示日期,例如2026-07-12 ~ 2026-07-13 | 不参与个人时区转换;不同地区查看日期不变。 |
无时间日期范围不得再以“开始日 00:00、结束日 23:59”作为可换算的业务值。若现有存储结构暂时仍需兼容时间戳,只能作为内部兼容表达,所有输入、输出、筛选与聚合必须按无时区日期解释,且不得执行时区偏移。
2.2.2 数据读写与查询规则
| 环节 | 显示时间=是 日期时间范围 | 显示时间=否 日期范围 |
|---|---|---|
| 新建/编辑 | 用户输入的本地日期时间按其时区换算后保存。 | 保存用户选择的开始/结束自然日期,不做时区换算。 |
| 详情/摘要/列表 | 按当前查看人的时区展示实际时刻。 | 展示保存的自然日期,不得因查看人时区变更。 |
| 筛选 | 按日期时间范围构造查询条件。 | 筛选值按自然日期构造,不得先转为东八区或个人时区再查询。 |
| 导入导出/API | 明确传递日期时间和时区语义。 | 仅传递YYYY-MM-DD 起止日期;不得暴露或依赖端点时分。 |
| 统计/公式/流程 | 继续按实际时刻计算。 | 按日期包含关系计算;同一天不因时区被划入前一天或后一天。 |
2.2.3 日志预设对象适配
日志的“日志开始日期”“日志结束日期”属于 显示时间=否 的标准日期范围字段,语义是日志归属日期或汇报周期,而不是日志提交时刻。
- 每日日志:开始日期和结束日期均应为日志归属日。例如列表“时间”为
2026年06月15日时,两个字段均应为2026-06-15。 - 周报/月报:开始日期和结束日期应稳定表达周期首尾日期;跨时区查看不得提前或延后任何一天。
- 日志列表“时间”、日志开始日期、日志结束日期、日志筛选与日志统计应使用同一归属日期口径。
- 本期不改变日志提交时间、创建时间和最后修改时间的时区逻辑;这些字段仍是实际时刻。
2.2.4 历史数据兼容
- 新数据:从上线后按配置分流处理。
- 历史无时间日期范围:需要先由研发核对原始保存值、创建人时区和现有转换路径,识别被时区转换误跨日的记录;不能仅根据当前页面显示值全量回写。
- 历史日期时间范围:保持原有时区换算语义,不参与本次日期范围修复。
- 日志历史数据:需专项评估是否回填开始/结束日期;回填后必须保证不改变原日志内容、提交时间和修改记录事实。
2.2.5 影响范围
| 范围 | 改造要求 |
|---|---|
| 对象字段配置 | “显示时间”配置需下发为明确的日期语义,供前后端统一判断。 |
| Web/移动端新建编辑、详情、摘要、列表 | 按配置分流展示和提交值。 |
| 筛选、报表、BI、导出 | 无时间日期范围按自然日期查询和聚合。 |
| 流程、公式、自动化、开放 API | 复核日期范围字段的输入输出与比较语义,避免通用日期时间转换重新引入跨日。 |
| 日志 | 开始日期、结束日期、周期显示、筛选和统计统一为归属日期口径。 |
2.3 待确认事项
| ID | 待确认事项 | 影响范围 | 负责人 | 结论 |
|---|---|---|---|---|
| 1 | 无时间日期范围的现有存储格式,以及可安全用于历史识别的原始创建时区字段。 | 历史数据修复范围与回填方案。 | PaaS 研发 | 待确认 |
| 2 | 日期范围在 BI、公式、流程、自动化和开放 API 中的实际调用清单。 | 改造覆盖完整性。 | PaaS 研发/测试 | 待确认 |
| 3 | 日志历史开始/结束日期是否本期回填,以及回填范围、灰度与回滚方案。 | 存量日志展示、筛选和统计。 | 协同日志产品/研发 | 待确认 |
| 4 | 显示时间=是 的地区时区 ID 存储与夏令时处理现状是否已全链路一致。 | 日期时间范围跨时区准确性。 | PaaS 研发 | 待确认 |
三、规范检查项
3.1 业务文案多语言 Key
无新增用户可见业务文案。本期复用既有“显示时间”“日期范围”等字段配置文案;若字段类型在 UI 中区分展示名称,复用现有多语言机制补齐对应 Key,具体 Key 待研发确认。
3.2 需求埋点
无。该需求为字段数据语义修复,不新增产品行为埋点。
3.3 沙盒/更改集能力
| 模块 | 功能点 | 是否支持沙盒 | 是否支持更改集 | 说明 |
|---|---|---|---|---|
| 对象字段配置 | 日期范围“显示时间”语义分流 | 待确认 | 待确认 | 若配置在沙盒/更改集中迁移,目标环境必须保留相同字段语义。 |
3.4 PaaS 国际化兼容检查
| ID | 多语接入事项 | 是否需要 | 注意事项 |
|---|---|---|---|
| 1 | 接入翻译工作台 | 否 | 不新增翻译工作台配置。 |
| 2 | CRM提醒 | 否 | 不新增提醒。 |
| 3 | 企信消息提醒 | 否 | 不新增消息。 |
| 4 | 修改记录 | 是 | 历史数据回填如发生,需保留可追溯的系统处理记录,具体方式待确认。 |
| 5 | 审计日志 | 待确认 | 研发确认是否需记录日期范围语义配置变更及数据回填。 |
| 6 | 支持快捷翻译能力 | 否 | 无新增输入文案。 |
| 7 | 支持数据多语能力 | 否 | 日期值不属于数据多语范围。 |
| 8 | 预置配置多语 | 否 | 不新增预置配置文案。 |
| 9 | 预置示例数据多语 | 否 | 不涉及。 |
3.5 新对象/新字段 BI 分析申请
| 对象/字段 | 是否已做流程支持申请 | 是否已做 BI 分析申请 | 内容 |
|---|---|---|---|
| 既有日期范围、日志开始日期、日志结束日期 | 不涉及新增申请 | 待确认 | 不新增字段;需核对既有 BI 对无时间日期范围的查询与聚合语义。 |
3.6 操作日志说明
用户手工编辑日期范围的操作日志保持现有规则。本期若执行历史数据修复,应以系统任务或迁移记录保留处理范围、规则版本、执行时间和结果,避免将系统回填伪装为用户手工修改。
3.7 需求风险点检测
| ID | 风险分组 | 风险类型 | 有无该风险 | 涉及风险的功能点 | 影响的企业数 | 是否报备 | 响应策略 |
|---|---|---|---|---|---|---|---|
| 1 | 对现逻辑有影响的风险点 | 交互体验有变化 | 有 | 无时间日期范围切换时不再跨日。 | 待统计 | 待确认 | 用跨时区用例验证新旧展示差异符合自然日期语义。 |
| 2 | 对现逻辑有影响的风险点 | 功能有减少 | 无 | 不减少字段能力;仅停止错误换算。 | -- | 否 | 保持日期时间范围能力不变。 |
| 3 | 对现逻辑有影响的风险点 | 功能逻辑的调整 | 有 | 字段配置决定数据语义。 | 待统计 | 待确认 | 配置迁移、筛选和接口同步改造;对历史数据先审计后处理。 |
| 4 | 新能力风险点 | 逻辑不完善 | 有 | 夏令时与日期时间范围兼容。 | 待统计 | 待确认 | 以地区时区 ID 覆盖夏令时开始日和结束日场景。 |
| 5 | 新能力风险点 | 有性能压力 | 待确认 | 历史数据识别与回填。 | 待统计 | 待确认 | 分批审计、灰度执行并保留可回滚清单。 |
3.8 上线策略
3.8.1 收费标准
- [X] 不收费
- [ ] 收费
3.8.2 上线节奏
- [X] 全网
- [ ] 灰度
| 灰度发布的原因 | 涉及既有日期范围和日志历史数据,需先核验跨时区展示、筛选与统计口径。 |
|---|---|
| 预计全网时机 | 待确认:完成历史数据审计和灰度验证后。 |
| 期间分几次灰度 | 待确认:建议先配置新建字段与新数据,再灰度既有对象和日志历史数据。 |
| 各灰度批次的时间节点及灰度的客户范围 | 待确认:由研发、测试和产品基于影响企业统计确定。 |
3.8.3 适用版本
| 资源名称 | 标准版 | 专业版 | 旗舰版 | 无限版 | 扩展资源包 |
|---|---|---|---|---|---|
| 日期范围时区语义优化 | 待确认 | 待确认 | 待确认 | 待确认 | 不涉及 |

