Ich dachte wirklich, ich würde langsam verstehen, wie das funktioniert, bis ich versucht habe, einen Testfall für diese Frage zu destillieren und wieder völlig verwirrt bin.
Mit einem Google Spreadsheet können Sie eine benutzerdefinierte Funktion wie diese schreiben:
function dateToSeconds(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
return (hours*3600) + (minutes*60) + seconds;
}
und rufen Sie es in einer Zelle auf, indem Sie z. B.
=dateToSeconds(A1)
und es tut, was Sie erwarten. Allerdings, wenn Sie es so nennen:
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("A2").setValue(dateToSeconds(sheet.getRange("A1").getValue()));
}
gibt es eine Diskrepanz von 25m 21s. Was zum Teufel?
Wenn Sie ein Datumsobjekt aus einem Skript so zurückgeben möchten, dass es als Uhrzeit formatiert ist, können Sie z. B. Folgendes tun
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);
}
und nennen es "by doing":
=newTime(A1, A2, A3)
und es funktioniert gut. Wenn Sie das tun:
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getRange("A1:C3").getValues();
sheet.getRange("D3").setValue(newTime(values[0], values[1], values[2]));
}
dann wird es (bei einer Eingabe von 11:00:00) wie ein Datum formatiert:
01/01/1970 01:00:00
was so aussieht, als würde es als eine Stunde nach der traditionelleren Epoche von 1970 interpretiert werden? Ich dachte, das Verhalten, das ich zuvor gesehen hatte, wäre ein wenig symmetrisch mit dem 25m 21s Offset oben und ich würde es sehen:
10:34:39
Mein Testfall ist h