【发布时间】:2012-04-28 11:45:26
【问题描述】:
我真的以为我开始理解它是如何工作的,直到我尝试为这个问题提炼一个测试用例并且再次完全困惑。
使用谷歌电子表格,您可以编写如下自定义函数:
function dateToSeconds(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
return (hours*3600) + (minutes*60) + seconds;
}
并通过例如在单元格中调用它
=dateToSeconds(A1)
它会如你所愿。但是,如果您这样称呼它:
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("A2").setValue(dateToSeconds(sheet.getRange("A1").getValue()));
}
有 25m 21s 的差异。什么鬼?
此外,如果您想从脚本中返回日期对象,以便将其格式化为时间,您可以这样做,例如
function newTime(hours, minutes, seconds) {
// 1899-12-30 is the epoch for time values, it seems
// http://stackoverflow.com/questions/4051239/how-to-merge-date-and-time-as-a-datetime-in-google-apps-spreadsheet-script
return new Date(1899, 11, 30, hours, minutes, seconds, 0);
}
并通过以下方式调用它:
=newTime(A1, A2, A3)
而且效果很好。如果你这样做:
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getRange("A1:C3").getValues();
sheet.getRange("D3").setValue(newTime(values[0], values[1], values[2]));
}
然后(给定 11:00:00 的输入)它被格式化为如下日期:
01/01/1970 01:00:00
这似乎被解释为比更传统的 1970 年代晚一个小时?我认为我之前看到的行为与上面的 25m 21s 偏移有点对称,我会看到:
10:34:39
我的测试用例是here
【问题讨论】:
标签: javascript google-sheets google-apps-script