Google Apps脚本中的Utilities.formatDate()输出上一个日期(例如输入25.05.2015 - >输出24.05.2015)

时间:2015-05-28 13:04:47

标签: date google-apps-script google-sheets

我在使用Google Docs的Utilities.formatDate()函数时遇到问题。

我有一个电子表格,其中包含我们在实验室中的所有订单。订单交付时,我们的实验室经理会在此类电子表格中的相关单元格中输入交货日期,格式如下:dd.MM.yyyy。

我创建了一个脚本,在提供某些条件的情况下,会向发送该订单的人发送电子邮件,提醒他们该订单已在该特定日期发送。这是代码:

    var grpWithMaxVaues = minMaxList.GroupBy(c => c.getMax())
                                    .OrderByDescending(c => c.Key)
                                    .FirstOrDefault() 

        var max =   grpWithMaxVaues.FirstOrDefault();

Console.WriteLine(max.FileName);

我用 function DeliveryAlerts() { try { var email_dict = {"Y":"Y@Z.com"} var spreadsheet = SpreadsheetApp.openById("ABC"); SpreadsheetApp.setActiveSpreadsheet(spreadsheet); var sheet = spreadsheet.getSheetByName("Orders"); var values = sheet.getRange("A2:Q251").getValues(); var bgcolours = sheet.getRange("A2:Q251").getBackgrounds(); for(var i=0;i<=249;i++) { var j = i + 2; if (values[i][16]=="Yes" && values[i][11]!="" && bgcolours[i][16]!="#b8b8b8") { var email_address = email_dict[values[i][13]]; var cur_date = Utilities.formatDate(values[i][11], "GMT+1", "EEE dd.MM.yyyy"); var message = "Hello there,\n\nYour order of " + values[i][4] + " has been delivered on "+ cur_date +".\n\nBest wishes"; var subject = "Delivery alert"; MailApp.sendEmail(email_address, subject, message,{replyTo:"abc@abc.com", name:"ABC"}); sheet.getRange("Q"+j).setBackground("#b8b8b8"); } } } catch (err) { MailApp.sendEmail("abc@abc.com", "Delivery Alerts Script in Order Master List", err); } } 将日期从2015年5月25日(即单元格中的值)重新格式化为2015年5月25日星期一。但是,我得到的是Sun 24.05.2015。

有人知道发生了什么吗?

提前谢谢。

尼古拉

1 个答案:

答案 0 :(得分:1)

检查脚本编辑器中的时区设置。在FILE菜单下,在脚本编辑器中选择PROJECT PROPERTIES。可以在Apps脚本中设置与电子表格中不同的时区设置。这是一个常见的问题。 Apps脚本允许从电子表格中设置单独的时区。此外,即使时间仅为一分钟,如果日期的时间设置全为零,则解决您遇到的问题很常见。当用户输入日期时,可能没有进行时间设置。所以时间设置为全零。日期是正确的,但时间全是零。例如,即使日期是在下午3点输入日期也是正确的,时间设置可以是当天的午夜。所以,即使你从该日期减去一秒,现在也就是前一天。