[英]Spreadsheet App converting Date()
问题:电子表格无法将输入日期识别为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:在对象Sat May 20 2017 00:00:00 GMT + 0200(CEST)中找不到函数getTime。 (第86行,文件“代码”)详细信息关闭
我在整个脚本中尝试了100万种方法,以使Spreadsheet停止将输入值自动转换为日期,以便至少可以创建时间戳或类似内容。 有谁知道为什么要这么做吗?
即使您在一个getValues()
范围内调用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()返回的值分配给变量。 另外,对空字符串和“ 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);
}
我最终接受了罗宾的建议,并做了以下工作,该工作有效:
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()
,“行”其中包含数据的行,“ day”是(我在脚本前面定义的第一行[0]的)列名我试图更改的日期列。
再次感谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.