Google Apps Script无法获取Google Sheets中近7天最新数据(3月12日后数据缺失)
Google Apps Script无法获取Google Sheets中近7天最新数据(3月12日后数据缺失)
嘿,我仔细看了你的问题,大概率是日期格式解析错误在搞鬼!咱们一步步拆解问题:
问题1:为什么3月12日后的数据不显示?
核心原因是你的时间戳格式和JavaScript的Date构造函数不兼容:
- 你的Sheet里时间戳是
DD/MM/YYYY HH:MM:SS格式(比如21/03/2025 7:05:24) - 但JS的
new Date()默认会把这种斜杠分隔的日期当成MM/DD/YYYY来解析 - 当日期里的“日”大于12时(比如3月13日及以后的日期),它会把“日”当成月份(13不是有效月份),导致
date.getTime()返回NaN,然后被你的if (isNaN(date.getTime())) continue;代码直接跳过了!
这就是为什么3月12日(日=12,刚好是有效月份上限)之后的数据全部消失——它们都被误判成无效日期过滤掉了。
问题2:如何正确获取近7天数据?
解决办法是手动解析DD/MM/YYYY格式的时间戳,替换掉原来自动解析的代码。修改你代码中处理日期的部分:
修改前的问题代码:
var date = new Date(rec.timestamp); if (isNaN(date.getTime())) continue;
修改后的正确代码:
// 拆分时间戳为日期和时间部分 var [dateStr, timeStr] = rec.timestamp.split(' '); // 拆分日期为日/月/年 var [day, month, year] = dateStr.split('/').map(Number); // 拆分时间为时/分/秒 var [hours, minutes, seconds] = timeStr.split(':').map(Number); // 手动构造Date对象(注意JS月份是0-11,所以要减1) var date = new Date(year, month - 1, day, hours, minutes, seconds); // 依然保留无效日期的判断(防止其他格式错误) if (isNaN(date.getTime())) continue;
额外验证点
修改完成后,你可以在代码里加一句调试日志确认日期解析是否正确:
console.log('解析后的日期:', date.toISOString());
确保所有DD/MM/YYYY格式的时间戳都被转换成了正确的ISO日期。
这样修改后,你的recordsMap就能正确收录所有日期的数据,后续的近7天过滤(new Date(date) >= sevenDaysAgo)和排序逻辑也能正常工作了。
备注:内容来源于stack exchange,提问作者Muhammad Affan
相关产品推荐
相关产品推荐

