使用 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
而不是 YYYY
。 yyyy
是年份,而 YYYY
是星期几。有关详细信息,请参阅参考资料。
yyyy 与 YYYY 的比较 运行:
参考:
好的,所以我终于弄明白了。
@nazia 的回答对我问题的第一部分有帮助,但不足以解释第二部分。
因此,对于第一部分,只需使用 'yyyy' 而不是 'YYYY',因为后者指的是星期几,正如@nazia 在 his/her 回答中所述。
问题的第二部分是由于日间储蓄差异...Google 仅显示 3 月和 10 月之间的倒数第二天,时区为 'GMT-4' 以补偿我们前进的一小时...
我是 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
而不是 YYYY
。 yyyy
是年份,而 YYYY
是星期几。有关详细信息,请参阅参考资料。
yyyy 与 YYYY 的比较 运行:
参考:
好的,所以我终于弄明白了。
@nazia 的回答对我问题的第一部分有帮助,但不足以解释第二部分。
因此,对于第一部分,只需使用 'yyyy' 而不是 'YYYY',因为后者指的是星期几,正如@nazia 在 his/her 回答中所述。
问题的第二部分是由于日间储蓄差异...Google 仅显示 3 月和 10 月之间的倒数第二天,时区为 'GMT-4' 以补偿我们前进的一小时...