Google App Script日期加7天异常:跨月份计算错误求助
问题原因
你的代码核心问题是**next_date是基于当前系统日期创建的,而非继承current_date的年月信息**。当调用next_date.setDate(current_date.getDate()+7)时,只修改了日期数值,但年份和月份还是当前系统的(比如测试时系统日期在10月),导致跨月计算完全出错。
修复方案
直接基于current_date创建next_date,确保年月和原日期一致,再执行加7天操作:
var current_date = datasheet.getRange(j,1).getValue(); // 基于原日期复制新对象,保留完整年月日信息 var next_date = new Date(current_date); // 重置时分秒为0 next_date.setHours(0, 0, 0, 0); // 在原日期基础上加7天 next_date.setDate(next_date.getDate() + 7); var ssTimeZone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(); datasheet.getRange(lastRow,1).setValue(Utilities.formatDate(next_date, ssTimeZone, 'dd.MM.yyyy'));
如果担心时区或闰年的边缘情况,也可以用毫秒数计算(一天=86400000毫秒):
var current_date = datasheet.getRange(j,1).getValue(); // 直接加7天的毫秒数 var next_date = new Date(current_date.getTime() + 7 * 86400000); next_date.setHours(0, 0, 0, 0); var ssTimeZone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(); datasheet.getRange(lastRow,1).setValue(Utilities.formatDate(next_date, ssTimeZone, 'dd.MM.yyyy'));
关键提醒
- 绝对不要用
new Date()创建新日期,这会获取当前系统时间,和你要处理的目标日期完全无关。 - 用
new Date(current_date)复制原日期对象,才能保证后续修改日期时,年、月信息不会错位。
内容的提问来源于stack exchange,提问作者John Kater
相关产品推荐
相关产品推荐

