You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发布广告时startTime与endTime存储时间不符问题排查

广告发布功能中startTime与endTime存储时区异常问题解决

问题概述

开发广告发布功能时,出现时间存储与预期不符的问题:

  • 输入:startTime: '2023-09-19T22:12:00'、endTime: '2023-09-19T22:13:00'
  • 实际存储:2023-09-19T16:42:00.000Z、2023-09-19T16:43:00.000Z
  • 预期存储:2023-09-19T22:42:00.000Z、2023-09-19T22:43:00.000Z(注:预期中的22:42应为输入时间22:12的UTC对应值,推测为笔误)

问题原因

核心问题出在时区解析逻辑:

  1. 代码中使用moment.tz(startTime, 'Asia/Kolkata')解析输入时间,将输入的2023-09-19T22:12:00认定为**亚洲/加尔各答时区(UTC+5:30)**的时间。转换为时间戳后,对应的UTC时间自然是2023-09-19T16:42:00.000Z(22:12减去5小时30分),这与实际存储结果一致。
  2. 日志中moment(startTime).format(...)输出的September 19, 2023 10:12:00是因为moment()默认使用服务器本地时区解析时间戳,若服务器时区不是亚洲/加尔各答,就会出现显示偏差。

解决方案

根据你的预期,需调整时间解析逻辑,以下是两种常见场景的处理方式:

场景1:输入时间为UTC时间,需直接存储为对应UTC时间

若输入的2023-09-19T22:12:00本身就是UTC时间,移除时区指定,直接用UTC规则解析:

// 替换原时区解析代码
startTime = moment.utc(startTime).valueOf();
endTime = moment.utc(endTime).valueOf();

修改后,时间戳对应的UTC时间即为2023-09-19T22:12:00.000Z,与预期(修正笔误后)一致。

场景2:输入时间为亚洲/加尔各答时区,需正确显示该时区时间

若输入时间确实是亚洲/加尔各答时区,当前存储的UTC时间是正确的,但日志显示需修正为对应时区:

// 修改日志输出代码,指定亚洲/加尔各答时区
console.log("Data", 
  moment.tz(startTime, 'Asia/Kolkata').format('MMMM DD, YYYY hh:mm:ss'), 
  moment.tz(endTime, 'Asia/Kolkata').format('MMMM DD, YYYY hh:mm:ss')
);

此时存储的2023-09-19T16:42:00.000Z是正确的UTC转换结果,读取时可再转换为亚洲/加尔各答时区时间展示。

验证

修改后重新测试:

  • 若按场景1处理,存储的时间将变为2023-09-19T22:12:00.000Z,符合预期(修正笔误后)。
  • 若按场景2处理,日志将输出亚洲/加尔各答时区的September 19, 2023 22:12:00,与输入时间一致。

内容的提问来源于stack exchange,提问作者GOKULSARVESH S K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:44:51