我正在使用 Google 电子表格每天记录一些事情。为了方便我的同事使用,我尽可能将电子表格制作为“界面式”,基本上它类似于一个表格。
这个“表单”有一个提交按钮,用于保存工作表并创建一个新工作表(模板副本)。
问题是保存的工作表应该与单元格中的日期一起保存。 但它保存在实际日期前一天的日期......(!)我快疯了,试图找出原因。
这是我在按下提交按钮时调用的 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”。
如果有人对此有适当的甚至是肮脏的快速修复,我很想听听。
最佳答案
您正在对这一行中的时区进行硬编码:
var Datename2 = Utilities.formatDate(newdate, "PST", "yyyy-MM-dd");
但这并没有考虑到夏令时和电子表格中的仅日期值总是在 00:00:00 小时,因此一小时类次可以更改日期......
替换为这样的自动值:
var Datename2 = Utilities.formatDate(newdate, Session.getScriptTimeZone(), "yyyy-MM-dd");
关于datetime - formatDate() 给出正确的日期 -1 天(Google Apps 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35488331/