Как установить срок выполнения задач Google

Как установить срок выполнения задачи с помощью службы задач Google в скрипте приложений?

Задачи Сервис

Попытка установить это значение на заданную дату, но это, похоже, обновляет только локальное значение, а не значение сервера, как предлагает tehhowch.

task.due = new Date();

Как вы обновляете сервер? Вот что я пробовал

var x = {
    due: new Date()
};
Tasks.Tasks.update(x, "MDE2NzI3NTAzNjc5NTQ1ODY5MTY6MDow", task);

но это выдает ошибку

Invalid value for: Invalid format: "Tue Apr 10 20:45:26 GMT-04:00 2018"

Завершенный проект

Я использовал этот код, чтобы создать этот проект для поддержания задач Google в актуальном состоянии:

Постоянно обновляйте задачи Google

https://github.com/CTOverton/Keep-Google-Tasks-Updated

2 ответа

Решение

В соответствии с документацией API Google Tasks для ресурса Task, due Параметр должен быть меткой времени RFC 3339. Так что вместо "Tue Apr 10 20:45:26 GMT-04:00 2018" так должно быть "2018-04-11T0:45:26.000Z", См. Связанный вопрос: Создать метку времени RFC 3339, аналогичную API Google Tasks?

Это тот же формат, который используется другими datetime свойства задачи, поэтому, если нужно зарегистрировать задачу:

console.log(Tasks.Tasks.get(listId, taskId));

Тогда due, completed а также updated свойства, если они присутствуют, будут указывать требуемый формат.

Из родного Javascript Date в скрипте Google Apps это проще всего сделать так:

function getExtension(listId, taskId) {
  var now = new Date();
  var deadline = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + 7));
  var newTask = {
    due: Utilities.formatDate(deadline, "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'")
  };
  // Since we supply only a partial resource, call .patch() rather than .update()
  Tasks.Tasks.patch(newTask, listId, taskId);
}

Идите вперед и дайте @tehhowch чек, но вот процедура, составленная из учебных пособий, которые можно найти в API задач, который находится здесь, который просматривает все ваши задачи и добавляет один день к их дате выполнения, если их текущая дата выполнения уже прошла, Я никогда раньше не использовал Task API, поэтому пример getExtension от tehhowch оказался очень полезным.

function addOneDayToDueDates(){
  var seconds=1000;
  var minutes=60*seconds;
  var hours=60*minutes;
  var days=24*hours;//this is just my simple minded way of get the millisecond in a day
  var nowValue=new Date().valueOf();
  var taskLists=Tasks.Tasklists.list();
  if(taskLists.items){//loop through all lists
    for(var i=0;i<taskLists.items.length;i++){
      var taskList=taskLists.items[i];
      var tasks=Tasks.Tasks.list(taskList.id);
      if(tasks.items){
        for(var j=0;j<tasks.items.length;j++){//loop through all task in list
          Logger.log('i=%s,j=%s\n',i,j);
          var task=tasks.items[j];
          var dueValue=new Date(task.due).valueOf();
          if(dueValue<nowValue){//date comparison
            var newDue = new Date(new Date(task.due).valueOf() + 1*days);
            Logger.log('newDue=%s,Due=%s',newDue,task.due);
            var newTask = {due: Utilities.formatDate(newDue, "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'")};
            Tasks.Tasks.patch(newTask, taskList.id, task.id);
          }
        }
      }
    }
  }
}

@tehhowch Я потратил некоторое время, пытаясь использовать идею pageToken, которую вы предложили. Я наконец-то смог увидеть количество итераций до двух после того, как получил около 350 задач, распределенных по 35 спискам.

Вот мой код: (кстати, мне бы хотелось, чтобы документация по скрипту приложений была немного более удобной для пользователей. Я использую эту справочную страницу и API Explorer, чтобы попытаться выяснить все это. Если вы увидите какие-либо очевидные ошибки, я буду признателен за комментарий как я всегда пытаюсь узнать больше)

 function listTasks() {
  var taskToken;
  var iteration=0;
  var opts={pageToken:taskToken,maxResults:100};
  do{
    iteration++;
    var myLists=Tasks.Tasklists.list(opts)
    if(myLists.items){
      for(var i=0;i<myLists.items.length;i++){
        var item=myLists.items[i];
        Logger.log(item.title + '\n' + item.id + '\n');
        var myTasks=Tasks.Tasks.list(item.id)
        if(myTasks.items){
          for(var j=0;j<myTasks.items.length;j++){
            Logger.log(myTasks.items[j].title + '\n');
          }
        }else{
          Logger.log('No tasks for ' + item.title + '\n');
        }
      }
    }
    Logger.log('Get Page Token ' + 'Iterations: ' + iteration);
    opts.pageToken=myLists.nextPageToken;
  }while(opts.pageToken);
  Logger.log('End of Function');
}
Другие вопросы по тегам