Сценарий Google Apps: получение даты из электронной таблицы и запись в контакты

Используя скрипт Google Apps, я пытаюсь взять дату, записанную в электронной таблице, и добавить ее в поле даты в контакт. В частности, я не могу преобразовать месяц даты javascript, прочитанной из электронной таблицы, в перечисление месяца, которое может использовать метод contact.addDate.

var months = ContactsApp.Month.values;
var birthdate = new Date( spreadsheet_date );
var month = months[ birthdate.getMonth() ];
contact.addDate(ContactsApp.Field.BIRTHDAY, 
     month, birthdate.getDate(), birthdate.getFullYear() );

2 ответа

Решение

Есть много способов приблизиться, так как я вижу, что переключение является самым простым, хотя нет и одной строки, так как нет имени месяца, встроенного в Javascript:

var month = birthdate.getMonth();
switch(month){
   case 0:
      month = ContactsApp.Month.JANUARY;
      break;
   case 1:
      month = ContactsApp.Month.FEBRUARY;
      break;
   [...]
   case 11:
      month = ContactsApp.Month.DECEMBER
      break;
}

Другая модель...

var arr = [
    CalendarApp.Month.JANUARY,
    CalendarApp.Month.FEBRUARY,
    CalendarApp.Month.MARCH,
    ...
];
var month = arr[birthdate.getMonth()];

Посмотрите, как я делаю это в этом посте другой вопрос, который у меня есть, здесь

Поле Google Birthday"День рождения" не отображается, если установлено из скрипта приложений.

Вам нужно сопоставить перечисление с названием месяца. Это позволит избежать длинного оператора switch. Это решение изначально было предоставлено мне @tehhowch.

var month = months[ birthdate.getMonth() ];
var monthAsInt={JANUARY:1,FEBRUARY:2,MARCH:3,APRIL:4,MAY:5,JUNE:6,JULY:7
  ,AUGUST:8,SEPTEMBER:9,OCTOBER:10,NOVEMBER:11,DECEMBER:12}[month];

как функция;

function monthToInt(month) {
  return {JANUARY:1,FEBRUARY:2,MARCH:3,APRIL:4,MAY:5,JUNE:6,JULY:7
      ,AUGUST:8,SEPTEMBER:9,OCTOBER:10,NOVEMBER:11,DECEMBER:12}[month];
}
Другие вопросы по тегам