为什么 Google Apps 脚本的日期值结果会相差 1 天?

Sol*_*ion 3 javascript google-sheets google-apps-script

目标: 我使用以下代码来简单测试是否能够提取正确的日期和天数。

function myFunction() {
  const spreadSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Purchases (Beta)');
  const getDate = new Date(spreadSheet.getRange('B4').getValue());
  const getDays = (new Date(getDate.getFullYear(), getDate.getMonth() + 1, 0)).getDate();
  Logger.log(getDate);
  Logger.log(getDays);
}
Run Code Online (Sandbox Code Playgroud)

代码的意图: getDate 应该从单元格 B4 获取日期,其中包含日期格式的值“2020-11-01”。对于getDays,它应该根据B4单元格的设置值来获取天数。

问题: 当我尝试注销 getDate 的结果时,它显示为:Sat Oct 31 20:00:00 GMT-04:00 2020。我不明白,因为 B4 中的值是 2020-11-01。

问题: 我想了解为什么会发生这种情况,并想知道如何根据 B4 单元格中的内容输出正确的日期。

有人可以帮忙吗?

Tan*_*ike 5

修改要点:

  • Sat Oct 31 20:00:00 GMT-04:00 2020当我看到从单元格值检索的值时2020-11-01,我认为在您的情况下,Google Apps 脚本项目的时区可能与 Google 电子表格的时区不同。为了检查这一点,请使用以下脚本。

      console.log(Session.getScriptTimeZone())
      console.log(SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone())
    
    Run Code Online (Sandbox Code Playgroud)
    • 运行此脚本时,可以在日志中看到 Google Apps 脚本项目和 Google 电子表格的时区。
    • 我认为从 的值来看Sat Oct 31 20:00:00 GMT-04:00 2020,在您的情况下,Google Apps Script 项目的时区可能是America/New_York。关于这一点,当使用新的 IDE 创建新的 Google Apps 脚本项目时,默认时区变为America/New_York. 我不确定这是一个错误还是当前的规范。
      • 此问题已报告给问题跟踪器。参考

我认为从上述情况来看,当时区更改时,您的问题可能会得到解决。那么下面的修改如何呢?

修改流程:

首先,请从电子表格中检查您的时区。在当前阶段,当电子表格创建为新电子表格时,您的时区已设置。

console.log(SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone())
Run Code Online (Sandbox Code Playgroud)

下一步,请将您的时区复制并粘贴到 Google Apps 脚本项目中。appsscript.json在这种情况下,请使用检索到的时区修改清单文件 ( )。参考号

"timeZone": "###", <--- Please set your timezone here.
Run Code Online (Sandbox Code Playgroud)

完成上述设置后,请再次测试您的脚本。

笔记:

当然,我认为您可以使用 Google Apps Script 项目的时区来设置 Google Spreadsheet 的时区。但是,在这种情况下,Google Apps 脚本项目的时区可能与您的时区不同。请小心这一点。

参考:

更新于 2021 年 4 月 6 日:

问题跟踪器中,我可以确认新 IDE 的这个错误与 Google Apps 脚本项目的时区有关。

  • 关于该错误,当使用新的 IDE 创建新的 Google Apps 脚本项目时,GAS 项目的时区始终为America/New_York。在我的地区,它是Asia/Tokyo.

今天,当我对此进行测试时,我可以确认这个错误已被删除。当我创建新的 Google Apps 脚本项目时,timeZonein的appsscript.json值为Asia/Tokyo。这对我来说是正确的价值观。