电子表格应用转换日期()

时间:2017-05-22 14:47:38

标签: javascript google-apps-script google-sheets

问题:电子表格没有将输入日期识别为Date(),因此我无法从Apps脚本中获取.getTime()。

问题:你能明白这是为什么吗?

结果: 这是我正在运行的脚本的一部分:

dates.map(function(inp) {
  if (inp != undefined && inp !== ""){
    inp = new Date(inp.getTime() - (date.getTimezoneOffset()*60000);
    return inp
  }
});

其中dates指的是范围:dates = sheet.getRange(2,1, lastR, 1).getValues();

目前此范围的手动输入值为“2017-05-20”,电子表格自动识别为“2017年5月20日星期五00:00:00 GMT + 0200(CEST)”

错误内容如下:

  

TypeError:在对象中找不到函数getTime 2017年5月20日00:00:00 GMT + 0200(CEST)。 (第86行,文件“代码”)详情解散

我已经在我的脚本中尝试了一百万种方法来让Spreadsheet停止将输入值自动转换为日期,这样我就可以制作至少时间戳等等。有谁知道它为什么会这样做?

3 个答案:

答案 0 :(得分:3)

即使你在一列范围内调用getValues(),它仍然是一个数组数组。

这里令人困惑的是,GAS尝试提供帮助并显示单元素数组中的唯一值。

从行中提取第一个元素应解决此问题。

dates.map(function(row) {
  var inp = row[0];
  if (inp != undefined && inp !== ""){
    inp = new Date(inp.getTime() - (date.getTimezoneOffset()*60000);
    return inp
  }
});

答案 1 :(得分:0)

如果您坚持通过Array.prototype.map()执行所有操作,则以下代码可能有效。我忽略了你的日期操作逻辑,而是在单元格中添加了5天的日期。对于要更新的​​值,必须将Array.prototype.map()返回的任何内容分配给变量。另外,对空字符串和'undefined'进行2次单独检查是多余的,因为JavaScript实际上认为它们都是'false'(不幸的是,这也适用于0,所以要小心)

       function getDates() {

          var ss = SpreadsheetApp.getActiveSpreadsheet();
          var sheet = ss.getSheets()[0];
          var range = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1);
          var values = range.getValues();

          var newValues = values.map(function(row) {

          var newRow = row.map(function(value){

          if (value){

          value = new Date(value.getTime() + 3600000*24*5) // adding 5 days

          return value;

        }

   });

   return newRow;

  });

   range.setValues(newValues);


}

答案 2 :(得分:0)

我最终采纳了罗宾的建议,做了以下工作:

 rows.map(function(r) {
        r.day = new Date(r.day.getTime() - (date.getTimezoneOffset()*60000));
        r.day = r.day.toISOString().split('T')[0];
        return r
      })

其中date被全局定义为date = new Date(),“rows”表示包含数据的行,而“day”是列名(我之前在脚本中定义的第一行[0])对于我试图改变的日期列。

再次感谢!