我真的以为我开始理解这是如何工作的,直到我尝试为这个问题提炼一个测试用例,然后又完全困惑了。
使用谷歌电子表格,您可以编写如下自定义函数:
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
我的测试用例是here https://docs.google.com/spreadsheet/ccc?key=0Ajjz7TV774F2dEZQbXRFQlpKRFNqTWVlWUt2UnE5cWc