この質問のテストケースを抽出しようとして、再び完全に混乱するまで、これがどのように機能するかを理解し始めていると本当に思っていました。
Googleスプレッドシートを使用すると、次のようなカスタム関数を記述できます。
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()));
}
25分21秒の不一致があります。一体何?
また、スクリプトから日付オブジェクトを返し、時刻としてフォーマットする場合は、次のように実行できます。
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年の時代から1時間後に解釈されているように見えますか?私が以前に見た振る舞いは、25m 21sのオフセットで少し対称的であると思いました、そして私は見るでしょう:
10:34:39
私のテストケースはここにあります