Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime formatDate()提供正确的日期-1天(谷歌应用程序脚本)_Datetime_Google Apps Script_Google Sheets_Dst - Fatal编程技术网

Datetime formatDate()提供正确的日期-1天(谷歌应用程序脚本)

Datetime formatDate()提供正确的日期-1天(谷歌应用程序脚本),datetime,google-apps-script,google-sheets,dst,Datetime,Google Apps Script,Google Sheets,Dst,我正在使用谷歌电子表格记录一些日常事务。为了方便同事使用,我将电子表格制作得尽可能“界面化”,基本上它类似于一个表单 此“表单”有一个提交按钮,用于保存工作表并创建新工作表(模板副本) 问题在于,保存的工作表应与单元格中的日期一起保存但它会在实际日期前一天保存日期。。。(!)我要发疯了,想知道为什么 以下是我在按下提交按钮时调用的谷歌应用程序脚本中的代码: function renameSheet() { var ShootName = SpreadsheetApp.getActiveSheet

我正在使用谷歌电子表格记录一些日常事务。为了方便同事使用,我将电子表格制作得尽可能“界面化”,基本上它类似于一个表单

此“表单”有一个提交按钮,用于保存工作表并创建新工作表(模板副本)

问题在于,保存的工作表应与单元格中的日期一起保存但它会在实际日期前一天保存日期。。。(!)我要发疯了,想知道为什么

以下是我在按下提交按钮时调用的谷歌应用程序脚本中的代码:

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");