如何设置 Google 任务截止日期
How to set Google Tasks Due Date
如何使用应用程序脚本中的 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 任务 API 文档 Task resource, the due
parameter must be an RFC 3339 timestamp. So instead of "Tue Apr 10 20:45:26 GMT-04:00 2018"
it should be "2018-04-11T0:45:26.000Z"
. See related question: Generate an RFC 3339 timestamp similar to Google Tasks API?
这与任务的其他 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 中找到的教程组成的例程 here 它会完成所有任务并增加一天如果他们当前的截止日期已经过去,则到他们的截止日期。我以前从未使用过任务 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 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');
}
如何使用应用程序脚本中的 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 任务 API 文档 Task resource, the due
parameter must be an RFC 3339 timestamp. So instead of "Tue Apr 10 20:45:26 GMT-04:00 2018"
it should be "2018-04-11T0:45:26.000Z"
. See related question: Generate an RFC 3339 timestamp similar to Google Tasks API?
这与任务的其他 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 中找到的教程组成的例程 here 它会完成所有任务并增加一天如果他们当前的截止日期已经过去,则到他们的截止日期。我以前从未使用过任务 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 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');
}