【问题标题】:calculating with dates and for loop使用日期和 for 循环计算
【发布时间】:2018-09-25 06:59:24
【问题描述】:

我正在尝试创建一个带有日期的 for 循环,但它没有按计划进行。 我要做的是在单元格 A1 中输入 startdate,在单元格 B1 中输入 enddate。 然后运行一个 for 循环:如果 startdate 小于 enddate,则将日期放入单元格 A2 并继续下一列。我唯一坚持的是如何在日期中添加一天。

见下面的代码:

function test() 
{
  var app = SpreadsheetApp;
  var ss = app.getActive();
  var sheet = ss.getActiveSheet();
  
  var start = sheet.getRange("A1").getValue();
  var end = sheet.getRange("B1").getValue();
  var day = 3600*24*1000;
  var diff = Math.floor((end-start)/day);
  var column = 1;
  
  for(var i=0;i<=diff;i++)
  {
    sheet.getRange(2, column).setValue(start+i*day);
    column++;
  }
  
}

有人可以向我解释为什么它不起作用。 非常感谢

【问题讨论】:

  • 请参阅How can I add 1 day to current date? 请注意,并非所有实行夏令时的日子都是 24 小时,它们会因 DST 偏移量而变短或变长(通常为 1 小时,但可能为 30 分钟)。
  • 谢谢,我知道如何添加一天,但如何设置新日期,因为如果我在 for 循环中尝试此操作,那么您只设置日期而不是月份和年份。

标签: javascript date for-loop google-sheets


【解决方案1】:

假设 start 是一个日期,那么你的问题是:

start + i * day

在使用+ 运算符的地方,左操作数(日期)是一个对象,因此被简化为带有提示字符串的原语,因此+ 被视为字符串连接,而不是数字。

你可以试试:

+start + i * day

强制 start 到一个数字,但结果将是一个数字,而不是一个日期。它也不处理一天的长度问题。我建议你先复制 start 日期,这样你就不要修改它,然后按the duplicate 递增副本:

function test() {
  var app = SpreadsheetApp;
  var ss = app.getActive();
  var sheet = ss.getActiveSheet();

  var start = sheet.getRange("A1").getValue();
  start = new Date(+start);
  var end = sheet.getRange("B1").getValue();

  var column = 1;

  for (var i=0; start <= end; i++) {
    sheet.getRange(2, column++).setValue(new Date(start.setDate(start.getDate() + 1)));
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 2021-01-05
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多