GoogleAppsScriptを使ってスプレッドシートでの作業を効率化・自動化しようと思った時に避けて通れないのは日付の扱い。例えば「あるセルに書かれた日付と、現在の日付を比較して、3日以内だったら、ある処理をおこなう」みたいな。
そしてスプレッドシート側には「表示形式」が設定できるじゃないですか。この表示形式の違いによって「日付・時刻が入ったセル」から取ってきた値がGASのコードの中で何になるのかついて調べました。
実験
サンプルスプレッドシート
1行目はどの「表示形式」を指定したか、です。
デフォルト=表示形式について何も設定していない状態
サンプルコード
function myFunction() {
const sheet = SpreadsheetApp.getActive().getActiveSheet();
const data = sheet.getRange("A2:E2").getValues()[0];
// デフォルト
console.log(data[0] instanceof Date); // => true
// 日付
console.log(data[1] instanceof Date); // => true
// 自動
console.log(data[2] instanceof Date); // => true
// 日時
console.log(data[3] instanceof Date); // => true
// 書式なしテキスト
console.log(data[4] instanceof Date); // => false
console.log(data[4] instanceof String); // => false
console.log(typeof data[4] ); // => string
}
結果
- 「デフォルト、日付、自動、日時」のときは
Dateオブジェクト
として取得されました。(はじめは「文字列」なのかなって思ってました) - 「書式なしテキスト」のときは
string
として取得されました。 (Stringオブジェクトではなく、プリミティブ型のstring
。 参考: Primitive (プリミティブ) - MDN Web Docs )
実務の中では「スプレッドシートで日付が入るセルは(書式なしテキストではなく)日付/時刻を表現できる表示形式を設定しておく」がいいと思います。