Google Apps Script日期对比问题:两类日期值如何统一比较?
解决Google Apps Script与电子表格日期对比的问题
问题根源
你在Google Apps Script里写var now = Date()时,Date()作为函数调用会直接返回日期格式的字符串,而非Date对象。此时调用valueOf()实际上是调用字符串的valueOf()方法,自然返回字符串本身,而非时间戳整数。
正确实现方式
方法1:获取正确的当前时间戳
改用new Date()生成Date对象,再调用valueOf()就能得到和电子表格一致的时间戳整数,直接对比数值即可:
// 正确创建当前时间的Date对象 var now = new Date(); // 获取时间戳整数 var nowTimestamp = now.valueOf(); // 电子表格提取的时间戳(示例值) var sheetTimestamp = 1707409320000; // 直接对比整数 if (nowTimestamp > sheetTimestamp) { Logger.log("当前时间晚于表格日期"); } else if (nowTimestamp < sheetTimestamp) { Logger.log("当前时间早于表格日期"); } else { Logger.log("时间完全一致"); }
方法2:将字符串日期转换为时间戳
如果已经得到了字符串格式的日期(比如误写Date()得到的结果),可以把它传入new Date()转换成Date对象后再取时间戳:
// 已有的日期字符串 var dateStr = "Thu Feb 08 2024 10:31:25 GMT-0600 (Central Standard Time)"; var dateObj = new Date(dateStr); var timestamp = dateObj.valueOf(); // 和电子表格时间戳对比 var sheetTimestamp = 1707409320000; console.log(timestamp === sheetTimestamp); // 输出对比结果布尔值
方法3:转换为Date对象直接对比
也可以把电子表格的时间戳转换成Date对象,直接和当前时间的Date对象用比较运算符对比:
var sheetTimestamp = 1707409320000; var sheetDate = new Date(sheetTimestamp); var nowDate = new Date(); if (nowDate > sheetDate) { Logger.log("当前时间晚于表格日期"); }
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

