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

标签 datetime google-apps-script google-sheets dst

我正在使用 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/

相关文章:

google-sheets - 如何设置多行文本格式以便轻松粘贴到 Google 电子表格中?

java - 如何在 Java 中使用 AVRO 序列化日期

datetime - 如何从日期时间格式的 CSV 中删除时间

javascript - 制作递归函数

Javascript:在插入 Google 表格之前按月而不是按天对 csv 数据进行分组

mysql - 缺少外键列

google-apps-script - 一次在 Gmail 线程中搜索多个未读标签的脚本

excel - 如何在Excel中使用单位缩写?

python - 如何在 python 中将 DateTime 对象转换为小时数?

java - 如何从字符串构造日期