GASでフォームのタイムスタンプを秒単位で取得!Date.getTime()徹底活用

GASでフォームのタイムスタンプを秒単位で取得!Date.getTime()徹底活用

Webアプリ開発において、フォームの送信日時やAPI連携時の処理時間を正確に記録したいと思ったことはありませんか? GAS(Google Apps Script)のDate.getTime()を使えば、ミリ秒単位のタイムスタンプを取得し、様々な場面で活用できます。この記事では、Date.getTime()の基本から、フォーム作成、API連携、ダッシュボード作成といったWebアプリ開発のシチュエーションに特化した実践的なコード例と、よくある問題の解決策を解説します。

Date.getTime()とは?

Date.getTime()は、JavaScriptのDateオブジェクトのメソッドで、1970年1月1日午前0時0分0秒(UTC)からの経過時間をミリ秒単位で返します。この値は、異なるシステム間で日時を比較したり、処理時間を計測したりする際に非常に便利です。

Dateオブジェクトの生成

Date.getTime()を使うには、まずDateオブジェクトを生成する必要があります。Dateオブジェクトは、現在の日時を表すことも、特定の日時を表すこともできます。

// 現在の日時を取得
const now = new Date();

// 特定の日時を指定(例:2024年1月1日)
const specificDate = new Date(2024, 0, 1); // 月は0から始まることに注意

getTime()でミリ秒を取得

生成したDateオブジェクトに対してgetTime()を呼び出すことで、ミリ秒単位のタイムスタンプを取得できます。

// 現在の日時のタイムスタンプを取得
const timestamp = now.getTime();
console.log(timestamp);

フォーム作成におけるDate.getTime()活用例

フォームでDate.getTime()を利用することで、送信日時を正確に記録し、データの分析や処理に役立てることができます。ここでは、フォーム送信時のタイムスタンプ取得、タイムスタンプの加工、保存について解説します。

フォーム送信時のタイムスタンプ取得

フォームが送信された際に、Date.getTime()を使ってタイムスタンプを取得し、スプレッドシートに保存する例です。

function doPost(e) {
const params = e.parameter;
const timestamp = new Date().getTime();
const sheet = SpreadsheetApp.getActiveSheet();

// スプレッドシートに書き込むデータ
const rowData = [
params.name, // フォームのname属性がnameの項目
params.email, // フォームのname属性がemailの項目
timestamp
];

sheet.appendRow(rowData);

// レスポンスを返す (例:JSON)
return ContentService.createTextOutput(JSON.stringify({status: 'success', timestamp: timestamp})).setMimeType(ContentService.MimeType.JSON);
}

カスタマイズ方法:

  • フォームの項目に合わせてparams.nameparams.emailを調整
  • タイムゾーンを考慮してUtilities.formatDate()でフォーマット

タイムスタンプの加工

取得したミリ秒単位のタイムスタンプを、人間が読みやすい形式に変換する例です。

function formatTimestamp(timestamp) {
const date = new Date(timestamp);
const formattedDate = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd HH:mm:ss');
return formattedDate;
}

カスタマイズ方法:

  • Utilities.formatDate()の第3引数で、日付フォーマットを自由に指定
  • タイムゾーンを適切に設定

スプレッドシートへの保存

フォームから送信されたデータとタイムスタンプをスプレッドシートに保存する例です。

function doPost(e) {
const params = e.parameter;
const timestamp = new Date().getTime();
const formattedTimestamp = formatTimestamp(timestamp); // タイムスタンプをフォーマット
const sheet = SpreadsheetApp.getActiveSheet();

// スプレッドシートに書き込むデータ
const rowData = [
params.name,
params.email,
formattedTimestamp
];

sheet.appendRow(rowData);

return ContentService.createTextOutput(JSON.stringify({status: 'success', timestamp: formattedTimestamp})).setMimeType(ContentService.MimeType.JSON);
}

API連携におけるDate.getTime()活用例

API連携においてDate.getTime()を利用することで、リクエストの送信時間やレスポンスの受信時間を計測し、APIのパフォーマンス分析やエラー追跡に役立てることができます。ここでは、APIリクエスト送信前後のタイムスタンプ取得、処理時間の計測、ログへの記録について解説します。

APIリクエスト送信前後のタイムスタンプ取得

APIリクエストを送信する前と後にDate.getTime()を使ってタイムスタンプを取得する例です。

function callApi() {
const startTime = new Date().getTime();
const url = 'https://example.com/api';
const options = {
'method' : 'get'
};

const response = UrlFetchApp.fetch(url, options);
const endTime = new Date().getTime();

const responseData = JSON.parse(response.getContentText());

return {startTime: startTime, endTime: endTime, data: responseData};
}

処理時間の計測

APIリクエストの処理時間を計測し、ログに出力する例です。

function measureApiTime() {
const result = callApi();
const startTime = result.startTime;
const endTime = result.endTime;
const elapsedTime = endTime - startTime;

Logger.log('API処理時間: ' + elapsedTime + ' ミリ秒');
return elapsedTime;
}

カスタマイズ方法:

  • Logger.log()の代わりに、スプレッドシートやCloud Loggingに記録
  • 処理時間が閾値を超えた場合に通知

ログへの記録

APIリクエストのURL、送信時間、処理時間、レスポンス内容などをログに記録する例です。

function logApiRequest(url, startTime, endTime, responseData) {
const sheet = SpreadsheetApp.getActiveSheet();
const elapsedTime = endTime - startTime;

const rowData = [
url,
startTime,
endTime,
elapsedTime,
JSON.stringify(responseData)
];

sheet.appendRow(rowData);
}

ダッシュボード作成におけるDate.getTime()活用例

ダッシュボードでDate.getTime()を利用することで、データの更新日時を正確に表示し、最新の状態を把握するのに役立てることができます。ここでは、データ取得時のタイムスタンプ表示、最終更新日の表示、リアルタイム更新について解説します。

データ取得時のタイムスタンプ表示

データを取得した日時をダッシュボードに表示する例です。

function updateDashboard() {
const timestamp = new Date().getTime();
const formattedTimestamp = formatTimestamp(timestamp);
const sheet = SpreadsheetApp.getActiveSheet();

// タイムスタンプを書き込むセルを指定
sheet.getRange('A1').setValue('最終更新: ' + formattedTimestamp);
}

最終更新日の表示

ダッシュボードの最終更新日をDate.getTime()を使って表示する例です。

function displayLastUpdate() {
const lastUpdateTimestamp = PropertiesService.getScriptProperties().getProperty('lastUpdate');
if (lastUpdateTimestamp) {
const formattedDate = formatTimestamp(parseInt(lastUpdateTimestamp));
return '最終更新: ' + formattedDate;
} else {
return 'まだ更新されていません';
}
}

カスタマイズ方法:

  • 定期的にupdateDashboard()を実行するようにトリガーを設定
  • PropertiesServiceを使って、最終更新日時を永続化

リアルタイム更新

Web AppsのdoGet()関数内でダッシュボードを更新し、定期的にリロードすることで、擬似的なリアルタイム更新を実現する例です。

function doGet(e) {
updateDashboard();
const lastUpdate = displayLastUpdate();
return HtmlService.createHtmlOutput('

ダッシュボード

' + lastUpdate + '

');
}

カスタマイズ方法:

  • setTimeout()の時間を調整して、更新頻度を変更
  • より高度なリアルタイム更新には、WebSocketなどの技術を検討

よくある問題とトラブルシューティング

  • タイムゾーンの問題: Utilities.formatDate()でタイムゾーンを明示的に指定
  • 日付フォーマットの問題: Utilities.formatDate()で適切なフォーマットを指定
  • ミリ秒単位の誤差: 処理時間の計測において、マイクロ秒単位の精度が必要な場合は、より高精度な計測方法を検討

カスタマイズ方法と応用例

  • タイムスタンプの比較: 2つのタイムスタンプを比較して、経過時間を計算
  • 特定の期間のデータ抽出: タイムスタンプを基に、特定の期間のデータを抽出
  • 処理時間の監視: APIの処理時間を監視し、異常値を検知

まとめ

GASのDate.getTime()は、Webアプリ開発において、日時を正確に扱うための強力なツールです。フォーム作成、API連携、ダッシュボード作成など、様々なシチュエーションで活用できます。この記事で紹介したコード例を参考に、Date.getTime()を使いこなして、より高度なWebアプリ開発に挑戦してください。

PR

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。

CodeCampで理想の働き方を実現しよう