Datetime 如何在Google Sheets脚本中增加日期?
我不熟悉gsheets脚本。我正在尝试这样做:在一个单元格中获取一个日期,然后将其更改为第二天,然后将其返回到另一个单元格Datetime 如何在Google Sheets脚本中增加日期?,datetime,google-apps-script,google-sheets,Datetime,Google Apps Script,Google Sheets,我不熟悉gsheets脚本。我正在尝试这样做:在一个单元格中获取一个日期,然后将其更改为第二天,然后将其返回到另一个单元格 var range = sheet.getRange('I1'); var date = range.getValues(); var datetmp = new Date(date); datetmp = datetmp + 1; newcell.setValue(datetmp).setHorizontalAlignment("center");
var range = sheet.getRange('I1');
var date = range.getValues();
var datetmp = new Date(date);
datetmp = datetmp + 1;
newcell.setValue(datetmp).setHorizontalAlignment("center");
I1单元格的日期为2019年12月27日。
我得到的结果是2019年12月27日星期五00:00:00 GMT+0700 ICT1。我在互联网上搜索过类似js的脚本代码。所以我做这个datetmp=datetmp+1;但它似乎不起作用。谷歌有没有办法做到这一点。谢谢。不要只添加1,而是尝试添加另一天,如下所示:
var date = new Date();
date.setDate(date.getDate()+1);
事实上,这是我在过去遇到过很多麻烦的事情,所以我在这方面做了一些尝试 代码如下:
function onOpen() {
SpreadsheetApp.getUi().createMenu("Date Tools")
.addItem('Generate Spreadsheet', 'generateTheSpreadsheet')
.addItem('Display Format of Active Range', 'displayFormatOfActiveRange')
.addItem('Clear Format of Active Range', 'clearFormatOfActiveRange')
.addItem('Set Format of Active Range', 'setFormatOfActiveRange')
.addItem('Select Column Skip Header', 'jjeSUS1.selectColumnsSkipHeader')
.addToUi();
}
function generateTheSpreadsheet() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var fA=[['','','','','']];
var oA=[['Description','Code','Result as Number','Result as Date','Date().valueOf()']];
oA.push(['','','#0.##########','M/d/yyyy','#']);
fA.push(['','','','','']);
if(sh.getLastRow()>1) {
sh.getRange(1,1,sh.getLastRow(),fA[0].length).clearContent();
}
oA.push(['Today','new Date()',new Date(),new Date(),Number(new Date().valueOf()).toFixed(0)]);
fA.push(['','','#0.##########','M/d/yyyy','#']);
oA.push(['Tomorrow at Midnight','new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1)',new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1),new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1),Number(new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1)).toFixed(0)]);
fA.push(['','','#0.##########','M/d/yyyy','#']);
oA.push(['Yesterday at Midnight','new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()-1)',new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()-1),new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()-1),Number(new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()-1)).toFixed(0)]);
fA.push(['','','#0.##########','M/d/yyyy','#']);
oA.push(['Tomorrow same time setDate()','new Date().setDate(new Date().getDate()+1)',new Date().setDate(new Date().getDate()+1),new Date().setDate(new Date().getDate()+1),Number(new Date().setDate(new Date().getDate()+1).valueOf()).toFixed(0)]);
fA.push(['','','#0.##########','M/d/yyyy','#']);
oA.push(['Tomorrow same time','new Date(new Date().setDate(new Date().getDate()+1))',new Date(new Date().setDate(new Date().getDate()+1)),new Date(new Date().setDate(new Date().getDate()+1)),Number(new Date().setDate(new Date().getDate()+1).valueOf()).toFixed(0)]);
fA.push(['','','#0.##########','M/d/yyyy','#']);
sh.getRange(1,1,oA.length,oA[0].length).setValues(oA);
sh.getRange(1,1,fA.length,fA[0].length).setNumberFormats(fA);
}
function displayFormatOfActiveRange() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getActiveRange();
var row=rg.getRow();
var col=rg.getColumn();
var fA=rg.getNumberFormats();
var vA=rg.getValues();
var html='<style>th,td{border:1px solid black;padding:2px 4px;}</style><table><tr><th>Row</th><th>Column</th><th>Value</th><th>Format</th></tr>';
for(var i=0;i<vA.length;i++) {
for(var j=0;j<vA[i].length;j++) {
html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',row+i,col+j,vA[i][j],fA[i][j]);
}
}
html+='</table>';
var userInterface=HtmlService.createHtmlOutput(html).setWidth(600);
SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Values & Formats');
}
function clearFormatOfActiveRange() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getActiveRange();
rg.setNumberFormat('');
}
function setFormatOfActiveRange() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getActiveRange();
var fA=rg.getNumberFormats();
var resp=SpreadsheetApp.getUi().prompt("Formats", fA[0][0], SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
if(resp.getSelectedButton()==SpreadsheetApp.getUi().Button.OK) {
rg.setNumberFormat(resp.getResponseText());
}
}
以下是我的电子表格:
列A是每行的简单描述
B列是C列和D列中的实际代码
列C的数字格式为0
D列的编号格式为M/D/yyyy
否则,C列和D列相同
E列Javascript Date.valueOf方法结果
F列是一个简单的单元格函数,它将每行D列中的值加1
G列和H列是C列和D列上的isDate函数。有趣的是,C列和D列之间的唯一区别是格式,所以我猜isDate会告诉您更多关于单元格格式的信息,而不是单元格内的对象类型
第4行曾经是另一个答案之一,您可以看到它返回毫秒数,因此电子表格似乎不知道如何处理它。当它像在F列中那样向其添加一时,它的结束只是将毫秒数增加一
第5行使用与第4行相同的方法,但我再次将其传递给日期构造函数,它返回一个漂亮的日期对象,电子表格很高兴地将其转换为一个日期对象,在C列和D列中,它继续正确地将值显示为一个数字,另一个显示为一个日期。此外,它还可以与其他电子表格功能配合使用,就像在F列中一样,生成“下一天”日期。请查看此功能,希望它能有所帮助!这回答了你的问题吗?谢谢你的帮助。但我的问题是我得到的结果是一个字符串。我以为第二天就有约会+1了。但似乎gsheets加上一个带有字符串1的日期并返回我的结果。我不知道为什么:datetmp是一个日期对象,而不是一个数字,尽管它存储为一个数字Ya,我认为date obj+1将在Internet上获得下一个日期搜索。我错了吗。。。