Cumpleaños en Google Calendar con edad

Durante muchos años he estado usando el calendario de Google. Siempre fue incomprensible por qué no muestra la edad de las personas de los contactos de Google en el momento del nacimiento, aniversario u otros eventos importantes.



Cuando comencé a buscar a propósito la respuesta a esta pregunta, descubrí que la solicitud de Google para mostrar la edad en el calendario es bastante popular y todavía no hay una respuesta definitiva. Me animó a crear una solución basada en Google Apps Script.


¿Por qué google scripts?


No quería usar ninguna plataforma o servicio de terceros, porque todos mis contactos están en la libreta de direcciones de Google. Tampoco quería utilizar una aplicación o complemento que recopile cualquiera de mis datos personales para fines incomprensibles. Se necesitaba una estructura de trabajo transparente.


Donde esta el codigo


No puedo decir que el guión fue escrito desde cero: aproveché los desarrollos de Bryan Patterson , que se publicaron hace 6 años, en 2014.


Aquí está el resultado:


Cumpleaños y aniversarios con fechas para su calendario .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(); } 

¿Cómo usarlo?


1.Cree un nuevo script de Google Apps en Google Drive:



2. Copie el código del script.


3. Pruebe la función "birthdayAgeToCalendar": el script creará eventos en el calendario predeterminado que indica la edad de las personas que tendrán cumpleaños dentro de los 31 días (pero este año):



4.Ver Ver / Registros:



5.Verifique el calendario:



6. Si todo está en orden, ejecute la función "TriggersCreateTimeDriven": creará un inicio automático de las funciones "birthdayAgeToCalendar" y "anniversaryAgeToCalendar" por cada primer día con un mes de anticipación.


Resumen


Creo que se ha resuelto el problema de mostrar la edad en el calendario de Google cuando se producen eventos importantes. También quiero agradecer a Yevgeny Namokonov ( canal de telegramas "Hojas de cálculo de Google" ) y a Alexander Ivanov, junto con su canal de telegramas, por su ayuda para separar y editar el código escrito.


Se pueden encontrar más detalles en GitHub .


Publicado por: Mikhail Shardin ,
25 de diciembre de 2019

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


All Articles