formatDate() 给出正确的日期 -1 天(Google Apps 脚本)

formatDate() gives correct date -1 day (Google Apps Script)

我正在使用 Google Spreadsheet 每天记录一些事情。为了让我的同事更容易使用,我尽可能将 spreadsheet 设置为 "interface-ish",基本上它类似于一个表单。

此 "form" 有一个提交按钮,用于保存 sheet 并创建一个新的 sheet(模板副本)。

问题是保存的 sheet 应该与单元格中的日期一起保存。 但它保存的日期比实际日期早一天...(!)我快要疯了,想找出原因。

这是我在按下提交按钮时调用的 Google Apps 脚本中的代码:

function renameSheet() {
var ShootName = SpreadsheetApp.getActiveSheet( ).getRange("G8").getValue();
var DateName1 = SpreadsheetApp.getActiveSheet( ).getRange("A8").getValue();
var newdate = new Date(SpreadsheetApp.getActiveSheet( ).getRange("A8").getValue());
var Datename2 = Utilities.formatDate(newdate, "PST", "yyyy-MM-dd");
var NewName = Datename2 + " - " + ShootName;
SpreadsheetApp.getActiveSpreadsheet().renameActiveSheet(NewName);
var oldSheet = ss.getActiveSheet();
// create a duplicate of the template sheet
ss.setActiveSheet(ss.getSheetByName("Original0"));
var newSheet = ss.duplicateActiveSheet();
newSheet.activate();
ss.moveActiveSheet(1);
newSheet.setName("NewLog");

}

如果单元格 A8 的值为“12.25.16”- sheet 将被命名为“12.24.16”。

如果有人对此有适当的或什至是肮脏的快速修复,我很想听听。

您正在对这一行中的时区进行硬编码:

var Datename2 = Utilities.formatDate(newdate, "PST", "yyyy-MM-dd");

但这没有考虑夏令时,电子表格中的日期值始终为 00:00:00 小时,因此一小时班次可以更改日期...

替换为这样的自动值:

var Datename2 = Utilities.formatDate(newdate, Session.getScriptTimeZone(), "yyyy-MM-dd");