URLをコピーしました!
スキルアップを始める!

【GAS】日付と時刻を結合してDate型にする(Part1)

GAS(GoogleAppsScript)
\ワードプレスのスキルアップはこちら!/ WordPress入門読本

Google Apps Script(GAS)を使用して、日付と時刻を結合してDate型にしてみます。以下は、具体的なコードの例です。

日付と時刻を結合する

function combineDateAndTime() {
  // 日付と時刻の値を取得
  var dateValue = "2023-11-15"; // 任意の日付
  var timeValue = "12:30:00";   // 任意の時刻

  // 日付と時刻を結合
  var combinedDateTimeString = dateValue + " " + timeValue;

  // 結合された文字列をDate型に変換
  var combinedDate = new Date(combinedDateTimeString);

  // 結果をログに出力
  Logger.log(combinedDate);
}

情報	Wed Nov 15 12:30:00 GMT+09:00 2023

この例では、dateValuetimeValueに日付と時刻の文字列を設定し、それらを結合してcombinedDateTimeStringを作成します。その後、new Date()を使用して、この文字列をDate型に変換します。

注意点として、日付と時刻の文字列が特定のフォーマットに従っている必要があります。上記の例では「YYYY-MM-DD HH:mm:ss」の形式を仮定しています。

セルの値を参照する(日付・時間)

次に、セルの値を参照してみます。

A1には日付、B1には時間が入っています。これらの値を結合してDate型に…変換したいです。

function combineDateAndTime() {
   // スプレッドシートのシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // A1とB1のセルから値を取得
  var dateValue = sheet.getRange("A1").getValue();
  var timeValue = sheet.getRange("B1").getValue();
  
  // 日付と時間を結合
  var combinedDateTimeStr = dateValue + " " + timeValue;
  
  // 日付型に変換
  var combinedDateTime = new Date(combinedDateTimeStr);
  
  // 結果をログに出力
  Logger.log(combinedDateTime);
}

情報	Thu Jan 01 09:00:00 GMT+09:00 1970

結合…でき…ない?

結果をセルに書き込む

結果が分かるように、C1セルに結果を書き込んでみます。

function combineDateAndTime() {
   // スプレッドシートのシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // A1とB1のセルから値を取得
  var dateValue = sheet.getRange("A1").getValue();
  var timeValue = sheet.getRange("B1").getValue();
  
  // 日付と時間を結合
  var combinedDateTimeStr = dateValue + " " + timeValue;
  
  // 日付型に変換
  var combinedDateTime = new Date(combinedDateTimeStr);
  
  // 結果をログに出力
  Logger.log(combinedDateTime);

  sheet.getRange("C1").setValue(combinedDateTime);
}

・・・?

結果が、1970/01/01になってしまいました。

情報	null

combinedDateTimeStrのログを取ると、nullになっています…。

そのままセル値を結合できない?

日付セルと時間セルを直接結合しようとしても、結果がおかしな状態になって上手く結合できませんでした。日付と時刻を合体して新しい日時を作るために、別の方法を試してみます。

function combineDateAndTime() {
   // スプレッドシートのシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // A1とB1のセルから値を取得
  var dateValue = sheet.getRange("A1").getValue();
  var timeValue = sheet.getRange("B1").getValue();
  
  var dateY = dateValue.getFullYear();
  var dateM = dateValue.getMonth();
  var dateD = dateValue.getDate();

  Logger.log(dateY);
  Logger.log(dateM);
  Logger.log(dateD);

  // 日付と時間を結合
  var combinedDateTimeStr = dateValue + " " + timeValue;
  
  // 日付型に変換
  var combinedDateTime = new Date(combinedDateTimeStr);
  
  // 結果をログに出力
  Logger.log(combinedDateTime);

  sheet.getRange("C1").setValue(combinedDateTime);
}

情報	2023.0
情報	10.0
情報	23.0

getFullYear()は、JavaScriptのDateオブジェクトのメソッドの1つで、そのDateオブジェクトが表す年(年号)を取得するために使用されます。

getMonth() メソッドを使って現在の月の数値を取得しています。注意が必要なのは、数値は0から始まるため、実際の月の数値とは1ずれていることです。例えば、1月は0、2月は1、というようになります。

現在の日付を表す Date オブジェクトを作成し、その中から .getDate() メソッドを使って現在の月の日の数値を取得しています。.getDate() メソッドは、1から31の範囲の整数を返します。

あとは、これらを使ってうまく結合してみます。

まとめ

今が11月15日であれば、dayOfMonth の値は15になります。.getDate() メソッドは月の日付の部分だけを取得するので、月や年に関する情報は .getMonth() や .getFullYear() などの他のメソッドを使用する必要があります。

Kindle Unlimited 会員は無料で購読できます
購読はこちら
Kindle Unlimited 会員は無料で購読できます
購読はこちら