我真的以爲我開始明白這是如何工作的,直到我試圖爲這個問題提煉出一個測試用例並且再次感到困惑。使用GAS從電子表格讀取/寫入時間值
隨着谷歌電子表格,你可以寫一個自定義的函數是這樣的:
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年代後一個小時?我想我以前見過的行爲是有點對稱的25米-21上述偏移和我會看到:
10時34分39秒
我的測試用例是here