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

时间:2016-02-18 17:25:26

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

我使用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");

}

如果单元格A8具有值" 12.25.16" - 该表将命名为" 12.24.16"。

如果有人对此有正确甚至是脏的修正,我很乐意听到它。

1 个答案:

答案 0 :(得分:5)

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

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

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

替换为这样的自动值:

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