我有这个脚本可以为Gmail中未读邮件提取日期(想法是我想获取最早的未读电子邮件的日期)
function someFunction () {
var oldSearchQuery = "in:Inbox is:Unread"
var oldThread = GmailApp.search(oldSearchQuery, 0, 500);
for (var inc = 0; inc < oldThread.length; inc++) {
oldThread.forEach(function(messages){
messages.getMessages().forEach(function(msg){
var date = msg.getDate()
Logger.log(date)
});
但是,我想对日期进行排序以获取最旧的日期(或者,如果有人知道更好的方法,只需获取最旧的未读电子邮件)。我尝试使用排序和反向:
Script as above but with ----
var date = msg.getDate()
date.sort();
date.reverse();
Logger.log(date)
});
但是它不喜欢它,因为getDate返回的值不能很好地与sort一起使用。任何人有任何想法吗?
编辑---------------------------------------------- ------------
已更新以显示当前脚本和输出:
for (var inc = 0; inc < oldThread.length; inc++) {
oldThread.forEach(function(messages) {
messages.getMessages()
.forEach(function(msg) {
var dates = msg.getDate()
var empty = []
empty.push(dates);
var sortedDateList = empty.sort(function(a,b){
return new Date(a) - new Date(b);
});
Logger.log(sortedDateList)
});
输出为:
[18-06-21 13:49:42:549 BST] [2018年6月20日星期三02:08:24 GMT + 01:00]
[18-06-21 13:49:42:729 BST] [星期二6月19日16:15:19 GMT + 01:00 2018]
[BST 18-18-21 13:49:42:734] [2018年6月20日星期三02:08:24 GMT + 01:00]
[18-06-21 13:49:42:739 BST] [星期二6月19日16:15:19 GMT + 01:00 2018]
我希望看到:
[18-06-21 13:49:42:729 BST] [2018年6月19日星期二16:15:19 GMT + 01:00]
[BST 18-18-21 13:49:42:734] [2018年6月20日星期三02:08:24 GMT + 01:00]
[18-06-21 13:49:42:739 BST] [2018年6月19日星期二16:15:19 GMT + 01:00]
[BST 18-18-21 13:49:42:734] [2018年6月20日星期三02:08:24 GMT + 01:00]
还不知道为什么每个邮件都返回2个日期,看起来像是在重复吗?
答案 0 :(得分:1)
您可以将未读邮件的日期列表放入数组中,然后可以在其上运行firstname
方法。例如,
我有一个这样的日期数组,与代码中显示的msg.getDate()相同。我已经更改了日期,月份,年份和时间,以确保它适用于所有人。
sort
现在您可以在此数组上应用var dateList = [ 'Tue Dec 18 22:14:59 GMT-11:00 2018',
'Wed Jul 18 22:14:59 GMT-11:00 2017',
'Tue Jun 12 02:14:59 GMT-11:00 2018',
'Thu Apr 12 21:14:59 GMT-11:00 2019',
'Thu Jun 14 22:14:00 GMT-11:00 2018',
'Fri Jan 12 22:14:59 GMT-11:00 2018' ]
sort
它将给出以下输出:
var sortedDateList = dateList.sort(function(a,b){
return new Date(a) - new Date(b);
});
此输出按升序排列。只需交换 a 和 b 以获得降序的结果。您可以通过[Wed Jul 18 22:14:59 GMT-11:00 2017,
Fri Jan 12 22:14:59 GMT-11:00 2018,
Tue Jun 12 02:14:59 GMT-11:00 2018,
Thu Jun 14 22:14:00 GMT-11:00 2018,
Tue Dec 18 22:14:59 GMT-11:00 2018,
Thu Apr 12 21:14:59 GMT-11:00 2019]
查看输出。
答案 1 :(得分:1)
这并不是要完全解决您的问题,而是要演示使用Array
函数从消息中获取信息。
function getThreadStartDate_(thread) {
const messages = thread.getMessages();
var now = new Date();
var start = messages.reduce(function (earliest, msg) {
var msgStart = msg.getDate();
return (msgStart < earliest) ? msgStart : earliest;
}, now);
return start;
}
function getEarliestMatchingThread_(query) {
const threads = GmailApp.search(query);
// Sort descending, so we can call pop() to access the earliest one.
threads.sort(function (a, b) {
return getThreadStartDate_(b) - getThreadStartDate_(a);
});
return threads.pop();
}
上述用法的示例:
function foo() {
const oldest = getEarliestMatchingThread_("your query here");
Logger.log(oldest.getFirstMessageSubject());
}
请注意,有一个隐含的假设,即您进行的查询不会过大(如果这样,Gmail会抛出错误)。我还假设至少有一个线程与查询匹配。我建议不要依赖这些假设:)
参考文献: