【问题标题】:GoogleApps Utilities.formatDate returns wrong dayGoogleApps Utilities.formatDate 返回错误的日期
【发布时间】:2026-01-17 16:10:02
【问题描述】:

我有一个 Google 电子表格并尝试从表格中读取日期。以下脚本将日期作为字符串提供。但是这一天太少了。

function testDate() {
  var selectedSpreadsheetId = PropertiesService.getUserProperties().getProperty("spreadsheetId");
  var sheet = SpreadsheetApp.openById(selectedSpreadsheetId);

  var rows = sheet.getDataRange();
  var values = rows.getValues();
  var row = values[0];
  var test = "";
  var test  = Utilities.formatDate(new Date(row[0]), "GMT+1", "MM/dd/yyyy");     
  Logger.log("result is: "+test)
}

您需要创建一个 Google 电子表格并在左上角的单元格中输入日期 14.10.2017。示例中给出的日期是德国日期格式。

日志中的结果是 10/13/2017 但应该是 10/14/2017

我知道 Google 使用“普通”Java SimpleDateFormat

为什么?

【问题讨论】:

  • 这可能是时区的问题,请将适当的时区传递给函数。

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


【解决方案1】:

您不应该像以前那样对时区进行硬编码,因为您所在的国家/地区使用夏令时。 您可以改用Session.getScriptTimeZone()SpreadsheetApp.getActive().getSpreadsheetTimeZone()

在您的代码中如下所示:

  var test  = Utilities.formatDate(new Date(row[0]), Session.getScriptTimeZone(), "MM/dd/yyyy");     
  var test2  = Utilities.formatDate(new Date(row[0]), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "MM/dd/yyyy");     
  Logger.log("result is: "+test)
  Logger.log("result2 is: "+test2)

【讨论】:

    最近更新 更多