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

Ste*_*en0 3 spreadsheet google-sheets google-apps-script

我正在使用Google电子表格记录日常事务.为了使我的同事对用户友好,我已经尽可能地将电子表格作为"interface-ish",基本上它类似于表单.

这个"表单"有一个提交按钮,用于保存工作表并创建一个新工作表(模板的副本).

问题是保存的工作表应与单元格中的日期一起保存.但是它会在实际日期前一天保存日期......(!)我很想弄清楚原因.

以下是按下提交按钮时我正在调用的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");

}
Run Code Online (Sandbox Code Playgroud)

如果单元格A8的值为"12.25.16" - 则表单将命名为"12.24.16".

如果有人对此有适当的甚至是脏的快速修复,我很乐意听到它.

Ser*_*sas 5

你正在硬编码这一行的时区:

var Datename2 = Utilities.formatDate(newdate, "PST", "yyyy-MM-dd");
Run Code Online (Sandbox Code Playgroud)

但这没有考虑到夏令时和日期只有电子表格中的值始终是00:00:00,所以一小时的班次可以改变日期......

替换为这样的自动值:

var Datename2 = Utilities.formatDate(newdate, Session.getScriptTimeZone(), "yyyy-MM-dd");
Run Code Online (Sandbox Code Playgroud)