Datetime 如何在Google Sheets脚本中增加日期?

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");

我不熟悉gsheets脚本。我正在尝试这样做:在一个单元格中获取一个日期,然后将其更改为第二天,然后将其返回到另一个单元格

  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上获得下一个日期搜索。我错了吗。。。