0

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

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

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

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

在此先感谢您的帮助。

4

1 回答 1

0

问题不在于您似乎认为的地方...

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

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

这为您提供了部分答案,因为它解释了原因……现在回答您的问题并提供答案,有几种可能的方法可以解决这个问题。

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

考虑到您有日期A1和时间B1,请使用公式创建 C1=A1+B1

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

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

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)
于 2013-06-21T15:18:58.990 回答