日期范围字段时区逻辑优化

来源:时间和日期范围字段时区逻辑优化_PRD_20260712.md

日期范围字段时区逻辑优化

版本:V0.1 | 创建日期:2026-07-12

需求来源:CRM 需求池 2026-05-09-21202、设计截图/交互说明、用户沟通、本地代码核对

优先级:P1

文档状态:待确认

云端预览:https://date-range-timezone-prd.pages.dev/


需求变更记录

变更日期变更人变更内容

依赖需求 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:0023: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. 日期范围组件根据“显示时间”配置决定数据语义:显示时间时按日期时间范围处理;不显示时间时按自然日期范围处理。
  2. 无时间的日期范围在新建、编辑、详情、摘要、列表、筛选、导入导出和开放接口中均不参与个人时区转换。
  3. 日志开始日期、日志结束日期始终反映日志实际归属日/汇报周期,与列表“时间”列保持一致,不因查看人时区提前一天。

1.6 范围与非目标

类型内容
本期范围标准日期范围组件;显示时间 配置的前后端数据处理;日志预设对象的开始/结束日期;相关对象详情、摘要、列表、筛选、导入导出、接口和统计口径。
非目标范围不改变普通日期字段的现有无时区语义;不改变时间字段的固定时差展示逻辑;不将无时间日期范围改造成可选时区的日期时间范围。

二、产品方案

2.1 整体产品方案

将“显示时间”从纯展示配置升级为日期范围组件的数据语义配置

  • 显示时间=是:字段定义为“日期时间范围”。开始和结束值是实际时刻,创建、编辑、读取时按用户时区换算;换算使用地区时区规则,包含夏令时----参考日期时间字段的处理逻辑
  • 显示时间=否:字段定义为“日期范围”。开始和结束值是自然日期,不是 00:0023: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 日志预设对象适配

日志的“日志开始日期”“日志结束日期”属于 显示时间=否 的标准日期范围字段,语义是日志归属日期或汇报周期,而不是日志提交时刻。

  1. 每日日志:开始日期和结束日期均应为日志归属日。例如列表“时间”为 2026年06月15日 时,两个字段均应为 2026-06-15
  2. 周报/月报:开始日期和结束日期应稳定表达周期首尾日期;跨时区查看不得提前或延后任何一天。
  3. 日志列表“时间”、日志开始日期、日志结束日期、日志筛选与日志统计应使用同一归属日期口径。
  4. 本期不改变日志提交时间、创建时间和最后修改时间的时区逻辑;这些字段仍是实际时刻。

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接入翻译工作台不新增翻译工作台配置。
2CRM提醒不新增提醒。
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 适用版本

资源名称标准版专业版旗舰版无限版扩展资源包
日期范围时区语义优化待确认待确认待确认待确认不涉及