电子表格中的 Google 日期与脚本记录器中的日期不同。这是时区问题吗?

key*_*use 4 logging date google-sheets google-apps-script

我在 Google 电子表格中输入了应发送电子邮件的特定日期。我有一个脚本可以从电子表格中获取值以 (1) 比较“日期电子邮件应该发送”是否等于今天,如果是,则运行脚本或 (2) 将今天的日期输入到电子表格中,即“日期电子邮件已发送”。

我看到记录器报告比电子表格中的实际日期晚 1 天。示例:电子表格显示 3/11/2015 ,记录器显示Tue Mar 10 22:00:00 PDT 2015, GMT-6:00, MM-dd-yyyy。这是夏令时的结果吗?我读过有人遇到与 DST 和脚本/触发器/电子表格相关的类似问题。

脚本项目和电子表格本身的时区都设置​​为 GMT-6(中央时间),因此没有差异。在时间改变之前,我没有遇到这个问题(据我所知)。Session.getTimeZone()虽然折旧返回正确的时区 (GMT-6)。

如果我使用new Date()它正确返回今天的日期。当我使用Utilities.formatDate(sheet.getRange("A1:A1").getValue(), "GMT-6", "MM-dd-yyyy");(其中单元格 A1 包含日期)时,它在日志中报告为比电子表格上显示的实际日期晚 1 天。

我尝试过的:

  1. 将时区格式化为“GMT-6:00”而不是“GMT-6”没有任何区别,尽管用户 Sergi 在此处建议了更改。

  2. 我尝试从电子表格(使用=today())中引用“今天的日期”,而不是通过带有new Date (). 这仍然会导致问题。当脚本将“发送电子邮件的日期(即今天)”记录回电子表格时,它显示为 1 天后。

其他选择? 关于 Google Script 问题的答案 #6,Sergi 的答案再次建议将其转换为字符串。有人可以解释一下(1)这样做的区别是什么以及(2)如果引用单元格值而不是new Date. 定义了FUS1变量之后是这样的吗?

 Utilities.formatDate(sheet.getRange("A1:A1").getValue(), FUS1 , "MMM-dd-yyyy h:mm a");
Run Code Online (Sandbox Code Playgroud)

谢谢!!

key*_*use 5

我想我可能已经找到了我自己问题的答案。这份报告的Google Script 问题 #1035表明该formatDate实用程序错误地从电子表格中读取日期。

这个答案以及该线程中的这个答案专门提供了一个目前似乎有效的解决方案。具体来说,而是采用了时区格式“GMT-6:00”或“GMT-”的任何变化,就必须改为使用特定时区的名称(如发现这里来自维基百科)。所以,对于 Central Time,我输入了这个,它似乎解决了我的问题。如果此修复程序不起作用,我会报告。

var emailDate = Utilities.formatDate(sheet.getRange("A1:A1").getValue(), "US/Central", "MM-dd-yyyy");
Run Code Online (Sandbox Code Playgroud)