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
この例では、dateValue
とtimeValue
に日付と時刻の文字列を設定し、それらを結合して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() などの他のメソッドを使用する必要があります。