Geburtstage in Google Kalender mit dem Alter

Seit vielen Jahren benutze ich Google Kalender. Es war immer unverständlich, warum das Alter von Personen aus Google-Kontakten zum Zeitpunkt der Geburt, des Jubiläums oder anderer wichtiger Ereignisse nicht angezeigt wird.



Als ich gezielt nach der Antwort auf diese Frage suchte, stellte ich fest, dass die Aufforderung, das Alter im Kalender von Google anzuzeigen, sehr beliebt ist und es immer noch keine eindeutige Antwort darauf gibt. Es hat mich ermutigt, eine Lösung zu entwickeln, die auf Google Apps Script basiert.


Warum Google Scripts?


Ich wollte keine Plattform oder keinen Dienst eines Drittanbieters verwenden, da sich alle meine Kontakte im Google-Adressbuch befinden. Ich wollte auch keine Anwendung oder ein Add-On verwenden, mit dem meine persönlichen Daten für unverständliche Zwecke gesammelt würden. Eine transparente Arbeitsstruktur war erforderlich.


Wo ist der Code?


Ich kann nicht sagen, dass das Drehbuch von Grund auf neu geschrieben wurde - ich habe die Entwicklungen von Bryan Patterson genutzt , die 2014 bereits vor 6 Jahren veröffentlicht wurden.


Hier ist das Ergebnis:


Geburtstage und Jahrestage mit Datumsangaben für Ihre calendar.gs
//   var contactsCal; var defaultCal; var now; var fromDate; var toDate; var events; //  (function() { contactsCal = CalendarApp.getCalendarById('addressbook#contacts@group.v.calendar.google.com'); defaultCal = CalendarApp.getDefaultCalendar(); //       // var defaultCal = CalendarApp.getCalendarById('regrncqXXXXXXp07eihepag74@group.calendar.google.com'); //   now = new Date(); fromDate = new Date(now.getTime()); toDate = new Date(now.getTime() + 31 * (1000 * 60 * 60 * 24)); // + 31     Logger.log(' : ' + Utilities.formatDate(fromDate, 'Asia/Yekaterinburg', 'MMMM dd, yyyy HH:mm:ss Z')); Logger.log(' : ' + Utilities.formatDate(toDate, 'Asia/Yekaterinburg', 'MMMM dd, yyyy HH:mm:ss Z')); events = contactsCal.getEvents(fromDate, toDate); Logger.log(' : ' + events.length); })(); function birthdayAgeToCalendar() { //  for (var i in events) { Logger.log('birthdayAgeToCalendar.  . : ' + events[i].getTitle()); var name = events[i].getTitle().split(" –  ")[0]; var contacts = ContactsApp.getContactsByName(name); Logger.log('birthdayAgeToCalendar.  . Name: ' + name); for (var c in contacts) { var bday = contacts[c].getDates(ContactsApp.Field.BIRTHDAY); var bdayMonthName, bdayYear, bdayDate; try { bdayMonthName = bday[0].getMonth(); bdayYear = bday[0].getYear(); bdayDate = new Date(bdayMonthName + ' ' + bday[0].getDay() + ', ' + bdayYear); Logger.log('birthdayAgeToCalendar. bdayDate: ' + bdayDate); } catch (error) {} var years = parseInt(new Date().getFullYear()) - bdayYear; try { defaultCal.createAllDayEvent(name + " –  , " + years + "  ()", new Date(bdayMonthName + ' ' + bday[0].getDay() + ', ' + new Date().getFullYear())); Logger.log(": " + name + " –  , " + years + "  ()"); } catch (error) {} } } } function anniversaryAgeToCalendar() { // for (var i in events) { Logger.log('anniversaryAgeToCalendar. . : ' + events[i].getTitle()); var name = events[i].getTitle().split("   ")[1]; var contacts = ContactsApp.getContactsByName(name); Logger.log('anniversaryAgeToCalendar. . Name: ' + name); for (var c in contacts) { var bday = contacts[c].getDates(ContactsApp.Field.ANNIVERSARY); //   https://developers.google.com/apps-script/reference/contacts/field var bdayMonthName, bdayYear, bdayDate; try { bdayMonthName = bday[0].getMonth(); bdayYear = bday[0].getYear(); bdayDate = new Date(bdayMonthName + ' ' + bday[0].getDay() + ', ' + bdayYear); Logger.log('anniversaryAgeToCalendar. bdayDate: ' + bdayDate); } catch (error) {} var years = parseInt(new Date().getFullYear()) - bdayYear; try { defaultCal.createAllDayEvent("   " + name + ", " + years + "  ()", new Date(bdayMonthName + ' ' + bday[0].getDay() + ', ' + new Date().getFullYear())); Logger.log(": " + "   " + name + ", " + years + "  ()"); } catch (error) {} } } } function TriggersCreateTimeDriven() { //      // Deletes all triggers in the current project. var triggers = ScriptApp.getProjectTriggers(); for (var i = 0; i < triggers.length; i++) { ScriptApp.deleteTrigger(triggers[i]); } //    ScriptApp.newTrigger("birthdayAgeToCalendar") //  .timeBased() .onMonthDay(1) //  .atHour(1) .create(); ScriptApp.newTrigger("anniversaryAgeToCalendar") // .timeBased() .onMonthDay(1) .atHour(2) .create(); } 

Wie benutzt man?


1.Erstellen Sie ein neues Google Apps-Skript auf Google Drive:



2. Kopieren Sie den Skriptcode.


3. Testen Sie die Funktion "birthdayAgeToCalendar" - das Skript erstellt Ereignisse im Standardkalender, die das Alter für Personen angeben, die innerhalb von 31 Tagen (aber in diesem Jahr) Geburtstag haben:



4.Siehe Ansicht / Protokolle:



5.Überprüfen Sie den Kalender:



6. Wenn alles in Ordnung ist, führen Sie die Funktion "TriggersCreateTimeDriven" aus. Sie erstellt einen Autostart der Funktionen "birthdayAgeToCalendar" und "anniversaryAgeToCalendar" für jeden ersten Tag im Monat im Voraus.


Zusammenfassung


Ich glaube, dass das Problem der Anzeige des Alters im Google-Kalender bei wichtigen Ereignissen behoben wurde. Ich möchte auch Jewgeni Namokonow ( Telegrammkanal „Google Sheets“ ) und Alexander Iwanow zusammen mit seinem Telegrammkanal für die Hilfe bei der Trennung und Bearbeitung des geschriebenen Codes danken.


Weitere Details finden Sie auf GitHub .


Gepostet von: Mikhail Shardin ,
25. Dezember 2019

Source: https://habr.com/ru/post/de481858/


All Articles