Google Apps Script Date对比差值异常及时间格式化问题
问题原因及解决方案
1. 时间差值异常的根因
你遇到的差值异常本质是日志输出的时间格式误导了你对真实时间的判断:
- 你使用的格式符
hh是12小时制的小时表示,范围为01-12,所以下午的14点会被显示为02点,你误以为dtToday和dtDebug都是当天凌晨2点多的时间,但实际dtToday是当天下午14:26:25。 - 我们可以验证你输出的差值:
4.3272544E7毫秒换算后约为12小时1分12秒,和「14:26:25 减 02:25:13」的时间差完全吻合;而dtDebug确实是凌晨02:26:13,和dtLastUpdate差1分钟,差值为60000毫秒也符合预期。
你的业务判断逻辑本身没有语法错误,之前不生效的原因就是dtToday和dtLastUpdate的真实差值已经超过12小时,Math.floor((t1-t2)/(3600*1000))的计算结果约为12,不满足<6的条件,所以不会触发return。
2. 12小时制显示问题的解决方法
你看到下午1:57输出为01:57:21,同样是格式符使用错误导致的:
- 要输出24小时制的时间,只需要把格式字符串里的小写
hh替换为大写的HH即可,HH代表24小时制的小时,范围为00-23。 - 修改后的格式化语句参考:
Logger.log (Utilities.formatDate(dtToday, Session.getScriptTimeZone(), 'MMMM dd, yyyy HH:mm:ss Z'));
修改后你再运行测试脚本,下午1:57就会显示为13:57:21 +0800,也能直接看到dtToday的真实小时值,不会再被12小时制的显示误导。
额外排查建议
如果修正格式后仍存在时间差不符合预期的情况,可以检查以下两点:
- 确认Google Sheets表格的时区和脚本时区一致,避免跨时区转换导致的Date对象值错误
- 确认写入「上次运行时间」到表格时,写入的是正确的Date类型值,而不是格式化后的字符串,避免字符串转Date时出现解析错误
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

