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

谷歌表格脚本:循环迭代时如何将startDate重置为午夜?

问题描述

我尝试基于谷歌表格创建多个从设定起始日期开始的重复事件,但当前代码会将开始时间累加在前一个事件的时间上。请问如何在每次循环迭代后将startDate重置为午夜?

当前代码

var spreadsheet = SpreadsheetApp.getActiveSheet()
const startDate = new Date('September 1, 2024 00:00:00 AM GMT+0100');
var endDate = new Date('08/10/2025');

function values() {
let range = spreadsheet.getRangeByName('sunday')

range.getValues().forEach(function(rows) {
var title = (rows[0])
const hours = (rows[1]*60)
const minutes = (rows[2]+hours)

    var startTime = new Date(startDate.setMinutes(minutes))
     Logger.log(title)
  
     Logger.log(startTime);
var startTime = new Date(startTime.setMinutes(0))
   });
 };

日志输出

9:37:11 PM Notice Execution started
9:37:13 PM Info test 1
9:37:13 PM Info Sun Sep 01 04:56:00 GMT+01:00 2024
9:37:13 PM Info test 2
9:37:13 PM Info Sun Sep 01 09:23:00 GMT+01:00 2024
9:37:13 PM Info test 3
9:37:13 PM Info Sun Sep 01 14:30:00 GMT+01:00 2024
9:37:13 PM Info test 4
9:37:13 PM Info Sun Sep 01 20:00:00 GMT+01:00 2024
9:37:13 PM Info test 5
9:37:13 PM Info Mon Sep 02 03:20:00 GMT+01:00 2024
9:37:14 PM Notice Execution completed

解决方案

问题出在startDate.setMinutes(minutes)会直接修改全局的startDate对象本身,导致每次循环都是基于上一次修改后的时间继续累加。要解决这个问题,每次循环都应该基于原始的起始日期创建新的Date实例,而非修改原对象。

修改方式:
将var startTime = new Date(startDate.setMinutes(minutes))替换为两步操作:先复制原始的startDate得到新的Date对象,再对这个新对象设置分钟数。

修改后的完整代码:

var spreadsheet = SpreadsheetApp.getActiveSheet()
const startDate = new Date('September 1, 2024 00:00:00 AM GMT+0100');
var endDate = new Date('08/10/2025');

function values() {
  let range = spreadsheet.getRangeByName('sunday')

  range.getValues().forEach(function(rows) {
    var title = rows[0]
    const hours = rows[1] * 60
    const minutes = rows[2] + hours

    // 基于原始startDate创建新的Date对象,避免修改原对象
    var startTime = new Date(startDate);
    startTime.setMinutes(minutes);
    
    Logger.log(title)
    Logger.log(startTime);
  });
};

这样修改后,每次循环的startTime都会基于原始的2024年9月1日00:00:00来设置分钟数,不会出现时间累加的问题,自然也就不需要额外重置startDate了。

内容的提问来源于stack exchange,提问作者Terry Edward

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:52:23