Google apps script Google应用程序脚本-将n小时添加到当前时间和日期

Google apps script Google应用程序脚本-将n小时添加到当前时间和日期,google-apps-script,Google Apps Script,我是谷歌应用程序脚本代码的新手,我试图简单地在当前时间中添加一个用户定义的小时数,比如说12小时。然后,代码将在谷歌文档中插入未来12小时的时间和日期 我使用ui.prompt让用户输入他们想要的未来的小时数。我的代码没有给我一个错误,但它在当前的一个小时里,把一些奇怪的天数放到了未来,我不知道它为什么这样做。这是我的代码,而else部分是我遇到问题的地方 function UpdateDocument() { var document = DocumentApp.getActiveDoc

我是谷歌应用程序脚本代码的新手,我试图简单地在当前时间中添加一个用户定义的小时数,比如说12小时。然后,代码将在谷歌文档中插入未来12小时的时间和日期

我使用ui.prompt让用户输入他们想要的未来的小时数。我的代码没有给我一个错误,但它在当前的一个小时里,把一些奇怪的天数放到了未来,我不知道它为什么这样做。这是我的代码,而else部分是我遇到问题的地方

function UpdateDocument() {

  var document = DocumentApp.getActiveDocument();
  var date = new Date();
  var tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate()+1);
  var ui = DocumentApp.getUi();

var regExpUpdateDate = "[A-Z]{3}, [A-Z]{3} [A-Z]{1}, [A-Z]{4}"; // Regular expression to find the correct line for the Next Update

  // Ask User if the they want to include the Next Update Line  
  var response = ui.alert('Would you like to include the Next Update line?' , ui.ButtonSet.YES_NO);

  // Process the users response.
  if (response == ui.Button.YES) {
    var responseNextUpdate = ui.prompt('Enter the number of hours you want until the next update (i.e. 12, 24, etc.)' 
                                       + ' or leave blank if you only want to include the date and omit the time. Note that'
                                       + ' leaving it blank will default to the day 24 hours from now.'); // Prompts user for number of hours until the next update
    if (responseNextUpdate.getResponseText() == '') {
      document.replaceText(regExpUpdateDate, Utilities.formatDate(tomorrow, 'America/Denver', 'EEEE, MMMM d, yyyy'));
    }
    else { // This is the section that I am having issues with...
      var userSelectedHours = new Date();
      userSelectedHours.setDate(userSelectedHours.getHours() + 2);
      document.replaceText(regExpUpdateDate, Utilities.formatDate(userSelectedHours, 'America/Denver', 'h a EEEE, MMMM d, yyyy'));
    }
  }
}
试试这个:

function UpdateDocument() {
  var document = DocumentApp.getActiveDocument();
  var date = new Date();
  var tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate()+1);
  var ui = DocumentApp.getUi();
  var regExpUpdateDate = "[A-Z]{3}, [A-Z]{3} [A-Z]{1}, [A-Z]{4}"; 
  var response = ui.alert('Would you like to include the Next Update line?' , ui.ButtonSet.YES_NO);
  if (response == ui.Button.YES) {
    var responseNextUpdate = ui.prompt('Enter the number of hours you want until the next update (i.e. 12, 24, etc.) or leave blank if you only want to include the date and omit the time. Note that leaving it blank will default to the day 24 hours from now.');
    if (responseNextUpdate.getResponseText() == '') {
      document.replaceText(regExpUpdateDate, Utilities.formatDate(tomorrow, 'America/Denver', 'EEEE, MMMM d, yyyy'));
    }
    else { // This is the section that I am having issues with...
      var hours=Number(responseNextUpdate.getResponseText());
      var delayedDate =new Date(new Date().setHours(new Date().getHours() + hours));
      document.replaceText(regExpUpdateDate, Utilities.formatDate(delayedDate, 'America/Denver', 'h a EEEE, MMMM d, yyyy'));
      Logger.log(Utilities.formatDate(delayedDate, 'America/Denver', 'h a EEEE, MMMM d, yyyy'));
    }
  }
}
试试这个:

function UpdateDocument() {
  var document = DocumentApp.getActiveDocument();
  var date = new Date();
  var tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate()+1);
  var ui = DocumentApp.getUi();
  var regExpUpdateDate = "[A-Z]{3}, [A-Z]{3} [A-Z]{1}, [A-Z]{4}"; 
  var response = ui.alert('Would you like to include the Next Update line?' , ui.ButtonSet.YES_NO);
  if (response == ui.Button.YES) {
    var responseNextUpdate = ui.prompt('Enter the number of hours you want until the next update (i.e. 12, 24, etc.) or leave blank if you only want to include the date and omit the time. Note that leaving it blank will default to the day 24 hours from now.');
    if (responseNextUpdate.getResponseText() == '') {
      document.replaceText(regExpUpdateDate, Utilities.formatDate(tomorrow, 'America/Denver', 'EEEE, MMMM d, yyyy'));
    }
    else { // This is the section that I am having issues with...
      var hours=Number(responseNextUpdate.getResponseText());
      var delayedDate =new Date(new Date().setHours(new Date().getHours() + hours));
      document.replaceText(regExpUpdateDate, Utilities.formatDate(delayedDate, 'America/Denver', 'h a EEEE, MMMM d, yyyy'));
      Logger.log(Utilities.formatDate(delayedDate, 'America/Denver', 'h a EEEE, MMMM d, yyyy'));
    }
  }
}

我发现用毫秒来加/减时间更容易

  var now = new Date(); // Fri Jul 05 09:53:12 GMT+05:30 2019

  var nowInMS = now.getTime(); // 1562300592245

  var add = 12 * 60 * 60 * 1000; // 43200000 = 12 hours in milliseconds

  var twelveHoursLater = nowInMS + add; // 1562343792245

  var futureDate = new Date(twelveHoursLater); // Fri Jul 05 21:53:12 GMT+05:30 2019

  var futureDateFormatted = Utilities.formatDate(futureDate, Session.getScriptTimeZone(), "dd-MMM-yy hh:mm a"); // 05-Jul-19 09:53 PM

我发现用毫秒来加/减时间更容易

  var now = new Date(); // Fri Jul 05 09:53:12 GMT+05:30 2019

  var nowInMS = now.getTime(); // 1562300592245

  var add = 12 * 60 * 60 * 1000; // 43200000 = 12 hours in milliseconds

  var twelveHoursLater = nowInMS + add; // 1562343792245

  var futureDate = new Date(twelveHoursLater); // Fri Jul 05 21:53:12 GMT+05:30 2019

  var futureDateFormatted = Utilities.formatDate(futureDate, Session.getScriptTimeZone(), "dd-MMM-yy hh:mm a"); // 05-Jul-19 09:53 PM

我也遇到了同样的问题,从变量中获取数据并合并到一个新变量中。下面我复制的部分代码。这不是很顺利,但它正在工作

  // The commands in the next lines were required to combine date and time
  // event_values[7] corresponds to the date of the event provided by the form to the spreadsheet as dd/MM/yyyy
  var day = new Date(event_values[7].toLocaleString()).getDate().valueOf();
  var month=new Date(event_values[7].toLocaleString()).getMonth().valueOf();
  var year=new Date(event_values[7].toLocaleString()).getFullYear().valueOf();
  // event_values[8] and [9] correspond to the start and end time of the event as HH:mm:ss also provided by the form to the spreadsheet
  var start_time=event_values[8].toString().split(":");
  // since the day was not provided for the start_time and end_time variables, in my case the script assumed as 1899. So I split the string first with ":" and then with "1899 ".
  var start_hour=start_time[0].split("1899 ")[1].valueOf();
  var start_min=start_time[1].valueOf();
  var end_time=event_values[9].toString().split(":")
  var end_hour=end_time[0].split("1899 ")[1].valueOf();
  var end_min=end_time[1].valueOf();

  var event_start_time = new Date(year,month,day,start_hour,start_min,"00");
  var event_end_time=new Date(year,month,day,end_hour,end_min,"00");

我也遇到了同样的问题,从变量中获取数据并合并到一个新变量中。下面我复制的部分代码。这不是很顺利,但它正在工作

  // The commands in the next lines were required to combine date and time
  // event_values[7] corresponds to the date of the event provided by the form to the spreadsheet as dd/MM/yyyy
  var day = new Date(event_values[7].toLocaleString()).getDate().valueOf();
  var month=new Date(event_values[7].toLocaleString()).getMonth().valueOf();
  var year=new Date(event_values[7].toLocaleString()).getFullYear().valueOf();
  // event_values[8] and [9] correspond to the start and end time of the event as HH:mm:ss also provided by the form to the spreadsheet
  var start_time=event_values[8].toString().split(":");
  // since the day was not provided for the start_time and end_time variables, in my case the script assumed as 1899. So I split the string first with ":" and then with "1899 ".
  var start_hour=start_time[0].split("1899 ")[1].valueOf();
  var start_min=start_time[1].valueOf();
  var end_time=event_values[9].toString().split(":")
  var end_hour=end_time[0].split("1899 ")[1].valueOf();
  var end_min=end_time[1].valueOf();

  var event_start_time = new Date(year,month,day,start_hour,start_min,"00");
  var event_end_time=new Date(year,month,day,end_hour,end_min,"00");