はじめに
GAS(Google Apps Script)でスプレッドシートから日付データを取得すると、あるセルは Date 型で返ってくるのに、別のセルは文字列で返ってくる――そんな経験はありませんか?
これはセルの入力方法によって型が変わるためです。日付として認識されたセルは Date 型、テキストとして入力されたセルは String 型になります。この違いを意識せずにコードを書くと、思わぬエラーや表示崩れの原因になります。
そこで、どちらの型が来ても安全に処理できる変換関数を用意しておきましょう。
こんな場面で使えます
- スプレッドシートから日付列を一括取得して画面に表示するとき
google.script.runでサーバーからクライアントにデータを渡すとき- 複数人が入力するシートで、日付の入力形式が統一されていないとき
- CSVインポートしたデータで日付が文字列になっているとき
実装コード
安全な日付フォーマット関数
以下の関数をプロジェクトに追加してください。
/**
* 日付をフォーマット(Date型でも文字列でも安全に処理)
*/
function formatDate_(value) {
if (!value) return '';
// Date型の場合
if (value instanceof Date) {
var y = value.getFullYear();
var m = ('0' + (value.getMonth() + 1)).slice(-2);
var d = ('0' + value.getDate()).slice(-2);
return y + '/' + m + '/' + d;
}
// 文字列やその他の型の場合 → そのまま文字列化
return String(value).trim();
}
処理の流れはシンプルです。
- 空値(
null,undefined,"")なら空文字を返す instanceof Dateで型を判定- Date型なら年・月・日を取り出して
"2026/04/15"形式に整形 - それ以外ならそのまま文字列として返す
月の取得で getMonth() + 1 としているのは、JavaScriptの getMonth() が 0始まり(1月=0、12月=11)だからです。ここを忘れると月がひとつズレるので注意してください。
('0' + n).slice(-2) は、1桁の数字を「04」のようにゼロ埋めするテクニックです。
使い方
スプレッドシートからデータを取得するときに、この関数を通すだけです。
var values = sheet.getRange('A1:A10').getValues();
for (var i = 0; i < values.length; i++) {
var dateStr = formatDate_(values[i][0]);
// dateStr は常に "2026/04/15" 形式の文字列
}
使い方・カスタマイズ
時刻も含めたい場合
時刻情報が必要なら、Date型の分岐に getHours() と getMinutes() を追加してください。
if (value instanceof Date) {
var y = value.getFullYear();
var m = ('0' + (value.getMonth() + 1)).slice(-2);
var d = ('0' + value.getDate()).slice(-2);
var h = ('0' + value.getHours()).slice(-2);
var min = ('0' + value.getMinutes()).slice(-2);
return y + '/' + m + '/' + d + ' ' + h + ':' + min;
}
出力フォーマットを変えたい場合
| フォーマット | コード例 |
|---|---|
| 2026-04-15(ハイフン区切り) | y + '-' + m + '-' + d |
| 04/15(月日のみ) | m + '/' + d |
| 2026年04月15日 | y + '年' + m + '月' + d + '日' |
注意点・ハマりポイント
google.script.runでDate型は渡せません。 サーバー→クライアント間のデータ受け渡しはJSON変換されるため、Date型は壊れます。サーバー側で必ずformatDate_を使って文字列に変換してから返しましょうgetMonth()の 0始まり は、JavaScript初心者がハマる定番ポイントです。+ 1を忘れずに- セルの表示形式が「日付」でも、値がテキストとして入力されていれば
String型で返ってきます。見た目だけでは判断できないので、この関数で両方に対応しておくのが安全です
まとめ
- スプレッドシートの日付は Date型と文字列型が混在しうる
instanceof Dateで型判定してから処理すれば、どちらが来ても安全google.script.runでデータを返すときは、サーバー側で文字列化しておくこと
