已开启
fix(cloud): 时区感知的日期边界 + 每日目标可配置 (#3, #4) #3
雅皮士创建于 9 天前
fix(cloud): 时区感知的日期边界 + 每日目标可配置 (#3, #4) #3
已开启
合并受阻
9 天前 关联了issue:[Bug][P0] getDailyWords / getProgress 云函数使用命名导入,与 node-appwrite v11 不兼容,[Bug][P1] 登录态不持久化 + UTC 时区导致连续打卡数据错乱,[Enhancement][P2] 可维护性与性能优化:dailyGoal 硬编码、查询效率、MVVM 分层、测试缺失
9 天前 关联了issue:[Bug][P0] getDailyWords / getProgress 云函数使用命名导入,与 node-appwrite v11 不兼容,[Bug][P1] 登录态不持久化 + UTC 时区导致连续打卡数据错乱,[Enhancement][P2] 可维护性与性能优化:dailyGoal 硬编码、查询效率、MVVM 分层、测试缺失
变更说明
本 PR 一并处理 Issue #3 的时区问题与 Issue #4 的 dailyGoal 硬编码(同属云侧「时间/配置一致性」,且改动集中在同一批文件,合并为一个聚焦 PR 以避免互相冲突)。
1)时区修正(Refs #3)
原实现用 UTC 日期界定「今日」:
const today = new Date().toISOString().split('T')[0]; // UTC对 UTC+8 用户,00:00–08:00 的学习记录会被算到前一天,导致
todayLearned/streak错乱。现改为按时区计算本地日边界:
resolveTzOffset()/tzDayStr()/tzDayStartIso()辅助函数;UTC+8(480 分钟),可通过请求body.tzOffset覆盖(任意 -720~840 分钟);[todayStart, todayStart+24h);learnWord的「昨天」及lastCheckinDate比较也统一基于该时区。验证:本地日
2026-11-06→ UTC 区间2026-11-05T16:00:00.000Z ~ 2026-11-06T16:00:00.000Z✓2)dailyGoal 配置化(Refs #4)
原 3 个函数各自硬编码
const dailyGoal = 10;。现统一为:const DAILY_GOAL = parseInt(process.env.DAILY_GOAL || '10', 10);deploy.py的COMMON_VARS增加DAILY_GOAL,优先读取.env;.env.example增加DAILY_GOAL=10说明。涉及文件
harmony_cloud/functions/getDailyWords/main.jsharmony_cloud/functions/getProgress/main.jsharmony_cloud/functions/learnWord/main.jsharmony_cloud/deploy/deploy.pyharmony_cloud/.env.example验证
说明
HttpUtil.ets注入tzOffset可作为后续增强;当前默认 UTC+8,对目标用户(CET-4 场景)已正确。getDailyWords/getProgress,但改动区域不同(#1 改导入行,本 PR 改日期/配置逻辑),建议先合并 #1。Refs #3, #4