【问题标题】:formatDate() gives correct date -1 day (Google Apps Script)formatDate() 给出正确的日期 -1 天(Google Apps 脚本)
【发布时间】:2016-02-18 17:25:26
【问题描述】:

我每天都在使用 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”。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    但这没有考虑夏令时,电子表格中的仅日期值始终为 00:00:00,因此一小时班次可以更改日期...

    用这样的自动值替换:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      相关资源
      最近更新 更多