返回首页

申请处理软件中的工作日计算

本文描述了在申请处理系统中实现工作日截止日期计算的实现。它涵盖了倒计时规则、计数器显示、示例、后端细节以及测试策略。该方法平衡了系统逻辑和 UX。

开发中的工作日:截止日期和 UX
Advertisement 728x90

应用处理系统中工作日的截止日期计算

应用处理系统需要跟踪工作日而非日历日,以确保截止日期计算的准确性。计数从发布日的工作时间内开始,若在非工作时间发布,则顺延至下一个工作日。系统启动时自动从外部服务加载日历,并每日检查当前及下一年的数据。若无日历,系统将回退至日历日计算。

发布后立即注册,无需等待工作日。例如:在工作日晚上11点发布,起始日移至下一个工作日;在同一日早上6点发布,若工作时间稍后开始,则仍算作当日。

计数器显示规则

计数器显示已过去的完整工作日数。无论发布时间如何,在截止日期的起始日,显示为0/N。

Google AdInline article slot
  • 工作时间内的发布日:直到次日00:00显示0/N。
  • 非工作时间发布:直到第一个工作日的00:00显示0/N。

计数器在完整工作日结束后于00:00递增。当值≥N(例如5/5)时,视为截止日期已过。

讨论中否决的替代方案

  • 从发布时刻开始以1/N计数——增加了完整日感知的复杂性。
  • 在工作日结束时递增——忽略了员工延迟。
  • 在工作日结束时标记为逾期——对于下午5:59与6:01的情况不直观。

计算示例

示例1:1月1日(假日)发布,第一个工作日为1月12日,截止日期为1月16日(5天)。1月13日处理——计数器为1/5(完整日:仅1月12日)。

示例2:处理时间为2天,在工作日早上9点(周一)发布。周一:0/2;周二:1/2;周二午夜:2/2(逾期)。

Google AdInline article slot

示例3:相同任务,周一晚上8点发布。周一:0/2;周二:0/2;周三:1/2;周三午夜:2/2。

为简化处理,时区统一为服务器时间。

后端实现细节

  • 内存中缓存日历:当前年+下一年(清理旧数据)。
  • 为每个应用记录计数器值和原始截止日期于数据库中——减少重新计算。
  • 存储截止日期历史:按类型/周期配置的单独表或实体上的列。

日历更新:启动时API请求,每日00:00执行。

Google AdInline article slot

测试关键场景

实时测试或通过数据库/API模拟:

  • 正常工作日。
  • 假日。
  • 工作日晚上(工作时间后)。
  • 无日历——回退和自动更新。
  • 逾期和正常截止日期。
  • 负载:跨多年度的多个日历。
  • 休眠的API服务。

关键要点

  • 计数从发布日的工作时间内或下一个工作日开始。
  • 计数器:已过去的完整日,起始为0/N。
  • 逾期:截止日期后00:00时≥N。
  • 缓存和数据库记录降低负载。
  • 测试边缘情况:假日、晚上、数据缺失。

— Editorial Team

Advertisement 728x90

继续阅读