【发布时间】:2020-11-22 08:20:51
【问题描述】:
我在 Google 表格和 Google Script 中的日期格式有一个奇怪的问题。
我正在开发一个脚本,它可以读取 Google 表格中的日期列表,然后自动向收件人列表发送电子邮件。我在电子表格中有一个单元格,其日期格式为“dd/mm/yyyy”,然后我使用以下公式(单元格 + 7、单元格 + 14、单元格 + 21、单元格 + 28 等)生成电子表格中的所有其他日期。
我使用以下代码读取电子表格中的日期:
var sheet = SpreadsheetApp.getActiveSheet();
var drng = sheet.getDataRange();
var rng = sheet.getRange(4, 2, drng.getLastRow()-3, drng.getLastColumn());
var rngData = rng.getValues();
var todayDate = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy");
// CYCLE THROUGH DATA
for (var i = 0; i < rngData.length; i++) { // cycle through the rows in the spreadsheet
var ptLastName = rngData[i][0]; // fixed patient data used to email customization
var ptFirstName = rngData[i][1];
var ptDoB = Utilities.formatDate(rngData[i][2], "GMT+1", "dd/MM/yyyy");
var ptSex = rngData[i][3];
var ptEmail = rngData[i][4];
var ptDoS = Utilities.formatDate(rngData[i][5], "GMT+1", "dd/MM/yyyy");
var ptDoD = Utilities.formatDate(rngData[i][6], "GMT+1", "dd/MM/yyyy");
for (var j = 7; j <= 14; j++) { // cycle through follow-up data for the current patient
var currentDate = Utilities.formatDate(rngData[i][j], "GMT+1", "dd/MM/yyyy");
if (currentDate == todayDate) { // send email with the questionnaire
writeEmail(ptFirstName, ptLastName, ptSex, ptDoD, ptEmail);
rng.getCell(i+1, j+1).setBackground("yellow");
}
}
}
问题是,当我尝试读取和格式化某些日期时,它们与电子表格中列出的日期不对应。我注意到代码中的错误日期系统地比电子表格中列出的日期早 1 天。仔细一看,我注意到有些日期是在 GMT+2 从电子表格中读取的,而另一些则是 GMT+1。
这很奇怪,因为我检查了我的系统设置(GMT+1)以及电子表格设置(GMT+1)。所以我不明白为什么有些日期会自动转换为 GMT+2。
【问题讨论】:
-
这可能与夏令时时区有关。添加一些示例数据输入和预期结果。
标签: datetime google-apps-script google-sheets timezone date-formatting