0

スプレッドシートに入力された情報を使用してカレンダー イベントを作成するスクリプトを使用しています。2 つのセルに開始時刻と終了時刻があります。ただし、イベントの開始時間と終了時間を取得しようとすると、値に2'20 インチの差が生じます (取得した値は

Sat Dec 30 1899 18:57:40 GMT-0430 (VEST)

ただし、セル値は19:00:00です)。

  • この 2'20" オフセットを修正する方法はありますか? それはバグですか? 私が見る違いは、「VET」(ベネズエラ標準時) 値ではなく「VEST」時間です。
  • バグの場合、常に同じ時差 (2'20") ですか? その場合、その日付にその秒を追加することでオフセットを修正できます。

よろしくお願いします。

4

1 に答える 1

0

問題は、あなたが思っている場所ではありません...

javascript には「時間」の値も「日付」の値もありません。日付オブジェクトは、視覚化の方法に関係なく、常に日、月、年、時、分、秒、およびミリ秒の完全な日付です。

表示する値は、常に完全な日付オブジェクトを表示するロガーから取得されます。値は有効な日付を定義していないため、0、つまりスプレッドシートの基準日と見なされます。スプレッドシートのセルに 0 を入力し、数値形式を強制的に日付にすることを確認するには、次のようになります。30/12/1899 00:00:00

それは理由を説明するので、答えの一部を提供します...今あなたの質問に答えて答えを提供するには、これを乗り越えるためのいくつかの可能な方法があります.

最も簡単な方法は、単純な数式を使用する 3 番目のセルを作成して、スプレッドシート レベルで 2 つのセルを 1 つに結合することです。

に日付と時刻があることを考慮A1B1て、数式で C1 を作成します=A1+B1

それは簡単でしたが、余分なセルを持ちたくないかもしれません...最終的には(単純な)追加を行う非表示のセルを使用し、スクリプトに他の2つのセルの代わりにそのセルを読み取らせることができます...

もう 1 つの可能性は、スクリプト自体にこの追加を行うことです。ここでは、可能な限り明確にするための段階的なプロセスを含むスクリプトを示します。

function myFunction() {
  var sh = SpreadsheetApp.getActive();
  var day = new Date(sh.getRange('A1').getValue());
  var time = new Date(sh.getRange('B1').getValue());
  var hour = time.getHours();
  var min = time.getMinutes();
Logger.log(day+'  + '+time+'  '+hour+':'+min+'   =  '+ new Date(day.setHours(hour,min,0,0)));
}

ロガーの結果: (ベルギー時間)

[13-06-21 17:16:19:071 CEST] Fri Dec 27 2013 00:00:00 GMT+0100 (CET)  + Sat Dec 30 1899 20:30:00 GMT+0100 (CET)  20:30   =  Fri Dec 27 2013 20:30:00 GMT+0100 (CET)
于 2013-06-21T15:18:58.990 に答える