使用 Google Apps 脚本的日期问题

Problems with dates using Google Apps Script

我是 Apps 脚本的新手,所以请多多包涵。

基本上,我有一个包含多个 sheet 数据的传播sheet。使用 Apps 脚本,我遍历它们以根据与问题无关的给定条件用整行填充数组。然后我遍历生成的数组以提取位于数组位置 3 的日期,当我尝试 Logger.log 结果日期时,我得到了奇怪的结果...

这里有两张数据截图

如您所见,我感兴趣的日期格式为 dd-MM-YY,这是我想要输出的格式,但记录器显示的格式很长。在使用实用程序 class 格式化它们之后,我尝试将其注销并将其与输出进行比较,这就是我发现不一致的时候。这是我的代码的样子:

for(j = 0; j < valuesArr.length; j++) {
  let rowValues = valuesArr[j];

  Logger.log(valuesArr[j][3]);

  let flDate = Utilities.formatDate(rowValues[3], "GMT+1","dd-MM-YYYY");
  
  Logger.log(flDate);

}

这就是我的 logger.log 的样子:

首先,第一个记录器输出“GMT-5”时区的日期,即使 spreadsheet 设置和我的语言环境都是“GMT+1”。我试过使用 setSpreadSheetLocale() 更改 spreadsheet 的语言环境,但没有任何改变。

然后,最后一个记录器输出实际上比数据中的实际日期晚了一年sheet,我真的搞不懂为什么会这样...

如果点差sheet 始终给我提供错误区域设置的日期,我可以接受,但如果数据sheet 中的日期不正确与我通过应用程序脚本获得的相同,那么我有一个大问题...

有什么想法吗?...非常感谢任何帮助。

编辑 尽管@NAZIA 的回答一开始似乎有效,但我现在发现了一个更奇怪的问题,因为我在数据中添加了更多日期: 这是虚拟数据(所有日期都是日期,使用日期选择器选择):

这是我的代码:

for (g = 0; g < arrayWithValues.length; g++) {
  let monthDate = Utilities.formatDate(value[3], "GMT+1", "dd-MM-yyyy");

  Logger.log(monthDate);
  Logger.log(value[3]);
}

这是我的日志...(仔细看最后一个值!)

谁能给我解释一下??

我不确定为什么发生了 1 年,但试试这个:

代码:

let flDate = Utilities.formatDate(rowValues[3], "GMT+1", "dd-MM-yyyy");

使用 yyyy 而不是 YYYYyyyy 是年份,而 YYYY 是星期几。有关详细信息,请参阅参考资料。

yyyy 与 YYYY 的比较 运行:

参考:

好的,所以我终于弄明白了。

@nazia 的回答对我问题的第一部分有帮助,但不足以解释第二部分。

因此,对于第一部分,只需使用 'yyyy' 而不是 'YYYY',因为后者指的是星期几,正如@nazia 在 his/her 回答中所述。

问题的第二部分是由于日间储蓄差异...Google 仅显示 3 月和 10 月之间的倒数第二天,时区为 'GMT-4' 以补偿我们前进的一小时...