Date 如何设置Google任务到期日
如何使用应用程序脚本中的google tasks服务设置任务的截止日期 尝试将此值设置为给定日期,但这似乎只更新本地值,而不是tehhowch建议的服务器值Date 如何设置Google任务到期日,date,google-apps-script,google-tasks-api,google-tasks,Date,Google Apps Script,Google Tasks Api,Google Tasks,如何使用应用程序脚本中的google tasks服务设置任务的截止日期 尝试将此值设置为给定日期,但这似乎只更新本地值,而不是tehhowch建议的服务器值 task.due = new Date(); 如何更新服务器?这是我试过的 var x = { due: new Date() }; Tasks.Tasks.update(x, "MDE2NzI3NTAzNjc5NTQ1ODY5MTY6MDow", task); 但它抛出了错误 Invalid value for: Inval
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 Tasks API文档,
due
参数必须为。因此,与其说是“2018年4月10日星期二20:45:26 GMT-04:00 2018”,不如说是“2018-04-11T0:45:26.000Z”。见相关问题:
这与任务的其他datetime
属性使用的格式相同,因此如果要记录任务:
console.log(Tasks.Tasks.get(listId, taskId));
然后到期
、完成
和更新
属性(如果存在)将指示所需的格式
从Google Apps脚本中的本机JavascriptDate
,最简单的方法是:
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中的教程组成,该例程将完成所有任务,如果当前任务的到期日是过去的,则会在任务到期日后增加一天。我以前从未使用过任务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);
}
}
}
}
}
}
函数addOneDayToDueDates(){
var秒=1000;
var分钟=60*秒;
var小时=60*min;
var days=24*hours;//这只是我一天中获取毫秒的简单方法
var nowValue=新日期().valueOf();
var taskLists=Tasks.taskLists.list();
if(taskLists.items){//遍历所有列表
对于(var i=0;i“它不工作”不是一个问题陈述。你得到了什么错误?发生了什么行为?应该发生什么行为?你发现了什么具体的研究?还有其他人遇到过这个问题吗?在你运行以下行之后,你如何处理
任务对象?我猜你正在成功地修改本地表示,但无法使用新资源更新服务器。请参阅,谢谢,我已修改了我的问题并尝试了您的建议。仍然不完全确定如何使用更新服务器所需的数据。您可以提供一个示例吗?谢谢您提供的示例。这非常有帮助!非常感谢!请注意,.list()
方法不会在一次调用中返回所有项目,只返回第一页(除非您通过可选的pageToken
参数请求不同的页面)@tehhowch谢谢你的评论。我自己不使用任务,所以我的示例总共只有两个任务。所以这会使代码变得复杂一些。@Cooper还不错-在do{…}while(opts.pageToken)中调用.list(opts)
循环,并将结果的.items
聚合到您选择的对象中。然后将opts.pageToken
设置为.nextPageToken
@tehhowch我回到这里是为了尝试实现您的建议,但所有任务都继续通过循环的一条路径完成。我在3个不同的列表中创建了大约30个任务。也许我还需要更多…不知道。如果您有时间,我会很感激您的帮助。@Cooper最大页面大小通常为20-100个项目。如果您想测试循环,请将maxResults
设置为1
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');
}