Je suis nouveau dans le code de script Google Apps et j'essaie simplement d'ajouter un nombre d'heures défini par l'utilisateur à l'heure actuelle (disons 12 heures par exemple). Le code insère ensuite l'heure et la date 12 heures dans le futur dans un document google.
J'utilise un ui.prompt pour que l'utilisateur entre le nombre d'heures dans le futur qu'il souhaite. Le code que j'ai ne me donne pas d'erreur, mais il met dans l'heure actuelle un nombre étrange de jours dans le futur (je ne sais pas pourquoi il fait cela). C'est le code que j'ai et la section else
est l'endroit où je rencontre des problèmes ...
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')); } } }
3 Réponses :
Essayez ceci:
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')); } } }
Je trouve plus facile d'utiliser des millisecondes pour ajouter / soustraire du temps.
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
J'ai eu le même problème, et j'ai obtenu les données des variables et les ai combinées dans une nouvelle variable. Ci-dessous, je copie la partie du code. Ce n'est pas simple, mais ça marche ...
// 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");