Je veux obtenir du temps avec les titres des cellules (sans fuseau horaire) et créer des événements dans un calendrier.
Title/Subject Start Times End Times
Board meeting 10/22/2017 13:00:00 10/22/2017 14:00:00
Team meeting 10/22/2017 10:00:00 10/22/2017 11:00:00
Impossible de trouver la méthode formatDate(string,string,string)
var data = sheet.getDataRange().getValues();
renvoie des chaînes, après conversion en date avec un nouveau Date(data[1][1])
j'ai un fuseau horaire provenant d'une feuille de calcul plus un fuseau horaire provenant d'un script. Comment puis-je l'insérer dans un calendrier avec un fuseau horaire différent juste pour être 10/22/2017 13:00:00
?
Je comprends que vous souhaitiez que l’heure de l’événement regarde soit la même chose dans le calendrier que dans le tableur, malgré toutes les différences de temps.
La première chose à faire est d’utiliser getDisplayValues()
au lieu de getValues()
. Cela retourne une chaîne qui correspond à ce que vous voyez dans la feuille de calcul. pas un objet de date. Cela supprime le fuseau horaire de la feuille de calcul.
Le fuseau horaire du script est toujours dans l'image, car il sera utilisé lorsque nous analyserons la chaîne de date avec new Date()
. Pour réconcilier le résultat avec le fuseau horaire du calendrier (appelé calZone
ci-dessous), je fais le calcul suivant:
var d = new Date();
var d1 = new Date(Utilities.formatDate(d, calZone, "yyyy-MM-dd'T'HH:mm:ss"));
var offset = d.valueOf() - d1.valueOf();
L'idée est que d1
est la date d
qui est convertie en texte dans le fuseau horaire du calendrier, puis analysée à nouveau à l'aide de la zone de script. La différence entre d et d1 correspond donc au décalage (en microsecondes) entre les deux fuseaux horaires. J'utilise ce décalage pour ajuster les heures de début et de fin de l'événement.
La fonction complète, créant un événement pour les dates/heures de début/fin fournies dans les cellules A1 et B1:
function createEvents() {
var times = SpreadsheetApp.getActiveSheet().getRange("A1:B1").getDisplayValues();
var cal = CalendarApp.getDefaultCalendar();
var calZone = cal.getTimeZone();
var d = new Date();
var d1 = new Date(Utilities.formatDate(d, calZone, "yyyy-MM-dd'T'HH:mm:ss"));
var offset = d.valueOf() - d1.valueOf();
var start = new Date(new Date(times[0][0]).valueOf() + offset);
var end = new Date(new Date(times[0][1]).valueOf() + offset);
cal.createEvent("test event", start, end);
}