如何设置Google任务截止日期

时间:2018-04-10 22:00:09

标签: date google-apps-script google-tasks-api google-tasks

如何使用应用脚本中的google任务服务设置任务的截止日期?

Tasks Service

尝试将此值设置为给定日期,但这似乎只更新本地值而不是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 Tasks的最新状态:

Keep Google Tasks Updated

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

2 个答案:

答案 0 :(得分:2)

根据Task resource的Google Tasks API文档,due参数必须为RFC 3339 timestamp。因此,"Tue Apr 10 20:45:26 GMT-04:00 2018"应该是"2018-04-11T0:45:26.000Z"而不是datetime。请参阅相关问题:Generate an RFC 3339 timestamp similar to Google Tasks API?

这与任务的其他console.log(Tasks.Tasks.get(listId, taskId)); 属性使用的格式相同,因此如果要记录任务:

due

然后,completedupdatedDate属性(如果存在)将指示所需的格式。

通过Google Apps脚本中的原生Javascript 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); } ,最简单的方法是:

group by

答案 1 :(得分:1)

继续给@tehhowch检查,但是这里是一个由任务API中找到的教程组成的例程here,它完成了你的所有任务并增加了一天到期如果他们的当前截止日期是过去的日期。我之前从未使用过Task API,因此tehhowch的getExtension示例非常有用。

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想法。在终于完成了35个列表中的大约350个任务之后,我终于能够看到迭代转到两个。

这是我的代码:(顺便说一下,我希望Apps脚本文档更加用户友好。我使用此reference page和API资源管理器来尝试全部解决问题。如果您发现任何明显的错误,我会很感激评论,因为我总是想了解更多信息)

 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');
}