我真的以为我开始理解它是如何工作的,直到我试图为这个问题提炼一个测试用例并且再次完全困惑。
使用谷歌电子表格,您可以编写如下自定义函数:
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 的输入)它被格式化为日期,如:
1970 年 1 月 1 日 01:00:00
看起来它被解释为更传统的 1970 年代之后的一个小时?我认为我之前看到的行为与上面的 25m 21s 偏移有点对称,我会看到:
10:34:39
我的测试用例在这里