MENU

GASの日付が1日ずれるときの確認順

当ページのリンクには広告(PR)が含まれていることがあります。
GASの日付が1日ずれるときの確認順。シートの日付、時差を照合、表示する日を確認の処理例。

シートでは11月1日なのに、GASのログには10月31日と出る場合は、まず同じ日時をどのタイムゾーンで表示したかを比べます。日付が変わったことと、違う地域の時刻として表示されたことを区別しないと、正しい日時へ1日を加えてしまうことがあります。

Apps Scriptのプロジェクトとスプレッドシートは、それぞれ別のタイムゾーンを持ちます。処理を直す前に両方の設定を読み、表示用に渡したタイムゾーンも確かめます。このページは画面へ値を送る際の型変換ではなく、シートとスクリプトの時刻設定の違いを調べる例です。

目次

シートとスクリプトの設定を読む

スクリプト側はSession.getScriptTimeZone()、シート側はgetSpreadsheetTimeZone()で取得できます。公式のSession資料でも、2つの設定が別であることが説明されています。

両方が違っていても、必ず設定ミスとは限りません。日本の締め日を日本時間で扱い、外部サービスとの日時はUTCで保存する設計もあります。「どの日に集計したいのか」を決めてから、表示する側の設定を選びます。

練習では、絶対的な日時が分かる2026-10-31T15:30:00Zを使います。末尾のZはUTCです。これを日本時間で表示すると11月1日0時30分、UTCなら10月31日15時30分です。日付だけを比べると、1日違って見える例になります。

同じDateを並べて表示する

以下は設定と表示結果を読み取るだけで、プロジェクトやシートの設定を書き換えません。日付パターンは、月が大文字のMM、分が小文字のmmである点にも注意してください。

function describeDateZones(value, scriptZone, sheetZone) {
  if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {
    throw new Error('有効なDateを指定してください');
  }
  const pattern = 'yyyy-MM-dd HH:mm';
  return {
    instant: value.toISOString(),
    scriptZone: scriptZone,
    scriptText: Utilities.formatDate(value, scriptZone, pattern),
    sheetZone: sheetZone,
    sheetText: Utilities.formatDate(value, sheetZone, pattern)
  };
}

function previewTimeZones() {
  const book = SpreadsheetApp.getActiveSpreadsheet();
  const sample = new Date('2026-10-31T15:30:00Z');
  console.log(JSON.stringify(describeDateZones(
    sample, Session.getScriptTimeZone(), book.getSpreadsheetTimeZone()
  )));
}

スクリプトがUTC、シートがAsia/Tokyoなら、scriptTextは2026-10-31 15:30、sheetTextは2026-11-01 00:30になる想定です。instantは同じUTCの日時のままです。表示した結果だけを見て、元のDateを翌日へずらさないようにします。

日付だけの入力へ時刻を足さない

「11月1日の締め日」と「11月1日0時の瞬間」は用途が違います。日付だけの文字列をDateへ変えるときに、どの地域の何時なのかを決めずに進めると、境界のずれが入り込みます。

特に文字列へZを足す操作は、見た目をそろえるための加工ではありません。その時刻をUTCとして指定する意味になります。入力元のタイムゾーンが分からない日時へ、推測でZや時差を付けないでください。

シートの値もgetValuesで受け取るDateと、getDisplayValuesで得る表示文字列は別です。表示文字列は読み手向けの形式なので、地域や表示形式が違えば、同じ解析方法で読めるとは限りません。スプレッドシートの値と表示から使い分けを確認できます。

調べる順番を固定する

まず対象セルの値と表示を確認し、次にプロジェクトとシートの設定を控え、最後に文字列化している箇所へ渡すタイムゾーンを見ます。どの段階で日付が変わったかを分けると、設定を一度に変えずに済みます。

公式のUtilities.formatDateとSpreadsheetを基にしています。ローカルでは日時を固定した代用formatDateで、2つのタイムゾーンが別々に渡ることと不正なDateの拒否を確認しました。Google上の表示と設定画面は未確認です。

カレンダーへ登録するときは、表示だけでなく登録先のタイムゾーンも関係します。予定登録の基本と合わせて、日付だけなのか、時刻を持つ予定なのかを決めてください。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次