我在使用Google表格和Google脚本中的日期格式时遇到了一个奇怪的问题。
我正在开发一个脚本,该脚本读取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。
答案 0 :(得分:0)
我以这种方式尝试过,并且效果很好:
function dattest() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getActiveSheet();
const rg=sh.getDataRange();
const vs=rg.getValues()[0];
vs.forEach(function(d){
Logger.log(Utilities.formatDate(new Date(d),Session.getScriptTimeZone(),"dd/MM/yyyy"));
});
}
显示值:
8/1/2020,8/8/2020,8/15/2020,8/22/2020
公式:
,=A1+7,=A1+14,=a1+21
视图执行的输出:
Aug 1, 2020, 2:52:37 PM Info 01/08/2020
Aug 1, 2020, 2:52:37 PM Info 08/08/2020
Aug 1, 2020, 2:52:37 PM Info 15/08/2020
Aug 1, 2020, 2:52:37 PM Info 22/08/2020
似乎对我来说正确
答案 1 :(得分:0)
感谢您的帮助。 我终于发现了问题所在。 电子表格中的日期存储为dd / mm / yyyy,系统会自动为它们添加00.00.00作为时间。结果,当我尝试使用代码读取某些日期时,由于夏令时的调整,其中一些日期被转换为前一天。我设法解决了所有日期增加一天1/3的问题。通过这种方式,它们被存储为dd / mm / yyyy 8.00.000 am,并且一年四季都保持同一天。