首页 > 解决方案 > 知道开始和结束时如何使用谷歌应用程序脚本获取天数

问题描述

使用谷歌应用程序脚本,我试图计算两个用户定义的日期(包括开始和结束)之间的天数。我已经尝试了许多我在谷歌上搜索过的代码迭代,但所有代码要么完成运行,要么没有结果,要么返回NaN

为了获得全局,我有一张表格需要计算两个用户定义日期之间每个日历日的多个值。我想我首先计算日期之间的天数,然后使用另一个函数创建日期列表,然后使用第三个函数插入计算值。

这是我承认需要帮助的地方:

function daysInRange() {
  var a = new Date(shtCalc.getRange(2, 3)); // dd/mm/yyyy, 01/02/2019
  var b = new Date(shtCalc.getRange(2, 6)); // dd/mm/yyyy, 28/02/2019
  var days = Math.floor((a-b)/(24*3600*1000));
  Logger.log(days);
}

我也试过:

我期待Logger.log(days);回来28,但我得到了NaN。请帮忙。

标签: datedatetimegoogle-apps-scriptgoogle-sheets

解决方案


问题

如果您分解正在发生的事情,您会看到a-b在您的情况下尝试对Range类的两个实例执行数学运算,因此返回NaN. 然后NaN除以24*60*60*1000,这也是NaN,最后,Math.floor()调用NaN也返回NaN:)

解决方案

您需要从 中显式提取值Range才能对其进行操作。SpreadsheetApp类有两种方便的方法:getValue(),这将提取左上角单元格的值Range, 和getValues(),它将提取二维Array结构中的所有值,如下所示:

[ //pseudo-code; row1: [ col1, colN ], rowN: [ col1, colN ] ]

样本

稍作修改,您的代码应如下所示:

function daysInRange() {
  var a = new Date( shtCalc.getRange(2, 3).getValue() );
  var b = new Date( shtCalc.getRange(2, 6).getValue() );
  var days = Math.floor((a-b)/(24*3600*1000));
  Logger.log(days);
}

有用的链接

  1. getValue()方法参考
  2. getValues()方法参考

推荐阅读