使用时间值时,Google Script会失去精确度

时间:2013-02-13 05:18:25

标签: google-apps-script google-sheets

我正在使用一个脚本,该脚本使用在电子表格上输入的信息创建日历事件,其中我在两个单元格中有一个开始和结束时间。但是,当我尝试获取事件的开始/结束时间时,值会得到 2'20“差异(我得到的值是

Sat Dec 30 1899 18:57:40 GMT-0430 (VEST)

但单元格值 19:00:00 )。

  • 有没有办法解决这个2'20“偏移?这是一个错误吗?我看到的差异是”VEST“时间而不是”VET“(委内瑞拉标准时间)值。
  • 如果它是一个错误,它是否总是相同的时差(2'20“)?在这种情况下,我可以通过将那些秒添加到该日期来修复该偏移。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这个问题不在你认为的地方......

javascript中没有'hours'值,也没有'date'值,日期对象始终是日,月,年,小时,分钟,秒和毫秒的完整日期,无论您选择如何将其可视化。

您显示的值来自记录器,该记录器始终显示完整的日期对象,并且由于您的值未定义有效日期,因此它认为它为0,即电子表格的参考日期。要检查是否只是在电子表格单元格中键入0并强制将数字格式设为日期,您将获得30/12/1899 00:00:00

这给你一个答案的一部分,因为它解释了为什么......现在回答你的问题并提供答案,有一些可能的方法来解决这个问题。

最简单的方法是在电子表格级别将2个单元格组合在一起,方法是创建一个使用简单公式的第3个单元格:

考虑到A1中的日期和B1中的小时,请使用公式=A1+B1创建C1

这很简单,但你可能不愿意拥有一个额外的单元格...你最终可以使用一个隐藏的单元格来执行(简单)添加并让你的脚本读取该单元格而不是另外两个单元格......

另一种可能性是在脚本本身中进行添加,这是一个逐步过程的脚本,尽可能清晰。

function myFunction() {
  var sh = SpreadsheetApp.getActive();
  var day = new Date(sh.getRange('A1').getValue());
  var time = new Date(sh.getRange('B1').getValue());
  var hour = time.getHours();
  var min = time.getMinutes();
Logger.log(day+'  + '+time+'  '+hour+':'+min+'   =  '+ new Date(day.setHours(hour,min,0,0)));
}

导致记录器:(比利时时间)

[13-06-21 17:16:19:071 CEST] Fri Dec 27 2013 00:00:00 GMT+0100 (CET)  + Sat Dec 30 1899 20:30:00 GMT+0100 (CET)  20:30   =  Fri Dec 27 2013 20:30:00 GMT+0100 (CET)