Google Apps Script - добавление n часов к текущему времени и дате - PullRequest
0 голосов
/ 05 июля 2019

Я новичок в коде скрипта Служб Google и пытаюсь просто добавить определенное пользователем количество часов к текущему времени (например, 12 часов). Затем код вставит время и дату 12 часов в будущее в документ Google.

Я использую 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'));
    }
  }
}

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Мне проще использовать миллисекунды для сложения / вычитания времени.

  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
1 голос
/ 05 июля 2019

Попробуйте это:

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'));
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...