Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 电子表格应用程序转换日期()_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

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

Javascript 电子表格应用程序转换日期(),javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,问题:电子表格无法将输入日期识别为日期(),因此我无法在应用程序脚本中从中获取.getTime() 问题:你能明白为什么会这样吗 结果: 以下是我正在运行的脚本的一部分: dates.map(function(inp) { if (inp != undefined && inp !== ""){ inp = new Date(inp.getTime() - (date.getTimezoneOffset()*60000); return inp } });

问题:电子表格无法将输入日期识别为日期(),因此我无法在应用程序脚本中从中获取.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:在对象Sat 2017年5月20日00:00:00 GMT+0200(CEST)中找不到函数getTime。(第86行,文件“代码”)详细信息


在我的脚本中,我已经尝试了一百万种方法来让电子表格停止将输入值自动转换为日期,这样我至少可以制作时间戳之类的东西。有人知道它为什么这样做吗?

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

让人困惑的是,GAS试图提供帮助,并在单元素数组中显示唯一的值

从行中提取第一个元素可以解决此问题

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

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

让人困惑的是,GAS试图提供帮助,并在单元素数组中显示唯一的值

从行中提取第一个元素可以解决此问题

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

如果坚持通过Array.prototype.map()执行所有操作,那么下面的代码可能会起作用。我忽略了你的日期操作逻辑,改为在单元格中添加5天的日期。对于要更新的值,必须将Array.prototype.map()返回的任何值赋给变量。另外,对空字符串和“未定义”的两个单独检查是多余的,因为JavaScript实际上认为它们都是“false”(不幸的是,这也适用于0,所以要小心)


如果坚持通过Array.prototype.map()执行所有操作,那么下面的代码可能会起作用。我忽略了你的日期操作逻辑,改为在单元格中添加5天的日期。对于要更新的值,必须将Array.prototype.map()返回的任何值赋给变量。另外,对空字符串和“未定义”的两个单独检查是多余的,因为JavaScript实际上认为它们都是“false”(不幸的是,这也适用于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])


再次感谢

我最终采纳了罗宾的建议,并做了以下工作,效果很好:

 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])


再次感谢

谢谢,这是朝着目标努力的,但问题仍然是最终的“日期”没有显示更新的值…:[17-05-22 19:06:50:561 CEST]Sat May 20 02:00:00 GMT+02:00 2017[17-05-22 19:06:50:561 CEST]-7200000.0[17-05-22 19:06:50:562 CEST][[Sat May 20 00:00 GMT+02:00 2017],]第一个日志是“inp”,第二个是时区偏移,第三个是最后的“日期”。你知道发生了什么吗?我不知道没有电话我能理解日志。你能提供一个可复制的例子吗?日期在哪里定义?您知道getTimezoneOffset返回分钟而不是小时吗?
var dates=sheet.getRange(2,1,lastR,1).getValues();dates.forEach(函数(row,k){var inp=row[k]if(inp!=未定义&&inp!==“”){inp=新日期(inp.getTime()-(Date.getTimezoneOffset()*60000));Logger.log(inp);返回inp});Logger.log(date.getTimezoneOffset()*60000);Logger.log(日期)其中定义了
date
(不是
dates
)?日期全局定义为
var date=new date()谢谢,这可以实现目标,但问题仍然是最终的“日期”没有显示更新值…:[17-05-22 19:06:50:561 CEST]Sat May 20 02:00:00 GMT+02:00 2017[17-05-22 19:06:50:561 CEST]-7200000.0[17-05-22 19:06:50:562 CEST][[Sat May 20 00:00 GMT+02:00 2017],]第一个日志是“inp”,第二个是时区偏移,第三个是最后的“日期”。你知道发生了什么吗?我不知道没有电话我能理解日志。你能提供一个可复制的例子吗?日期在哪里定义?您知道getTimezoneOffset返回分钟而不是小时吗?
var dates=sheet.getRange(2,1,lastR,1).getValues();dates.forEach(函数(row,k){var inp=row[k]if(inp!=未定义&&inp!==“”){inp=新日期(inp.getTime()-(Date.getTimezoneOffset()*60000));Logger.log(inp);返回inp});Logger.log(date.getTimezoneOffset()*60000);Logger.log(日期)其中定义了
date
(不是
dates
)?日期全局定义为
var date=new date()