スキルアップを始める!

Contact Form7の送信時にGASとLine Notifyで通知を受け取る-Part4

WordPress(ワードプレス)
\ワードプレスのスキルアップはこちら!/ WordPress入門読本

WordPressのContact Form7プラグインで送信があった際に、LINEに通知を受け取る方法です。前回の続きです。

Part3はこちら↓

yyyy/mm/dd形式に変換する

Sat May 06 2023 00:00:00 GMT+0900 (GMT+09:00)形式をyyyy/mm/dd形式に変換してみます。

日付の列があった場合に「Sat May 06 2023 00:00:00 GMT+0900 (GMT+09:00)形式」といった形式で値が取得されます。

こちらは「日付データ(Date型データ)」と呼ばれるものです。

日付データ(Date型データ)とは?

日付データ(Date型データ)とは、コンピューターにおいて日付を扱うために用いられるデータ型の一つです。年、月、日、時、分、秒などの複数の情報を持ち、日付計算や日付の比較などに利用されます。日時データの原本データのような状態です。

一般的には、以下のような形式で表示されます。

Sat May 06 2023 00:00:00 GMT+0900 (GMT+09:00)
Sat May 07 2023 14:16:00 GMT+0900 (GMT+09:00)
Sat May 08 2023 09:31:00 GMT+0900 (GMT+09:00)

日付を「フォーマット」する

日付データ(Date型データ)は「フォーマット」と呼ばれる変換を行うことで、文字列に変換することができます。以下は、現在の日付を”yyyy/MM/dd”の形式の文字列に変換する例です。

function myFunction() {
  // 現在の日付を取得
  var date = new Date();
  
  // 日付をフォーマットして文字列に変換
  var formattedDate = Utilities.formatDate(date, "JST", "yyyy/MM/dd");
  Logger.log(formattedDate);
}

Sat May 06 2023 00:00:00 GMT+0900 (GMT+09:00)
上記の表示の場合は、以下のように変換されます。
2023/5/6

ループ文の中でフォーマットする

前回までに作成したループ文の中で、日付の列をフォーマットする方法を考えてみます。

  for (var i = 0; i < lastcol; i++) {
    message += sheet.getRange(2, i+1).getValue() + ":";
    message += sheet.getRange(lastrow, i+1).getValue() + "\n";
    Logger.log(message);
  }

このとき「生年月日」という名前の列に該当する場合、値がフォーマットされれば良いので、以下のようにすることで可能です。

  let headValue = "";
  let messageValue = "";

  for (var i = 0; i < lastcol; i++) {
    headValue = sheet.getRange(2, i+1).getValue();
    messageValue = sheet.getRange(lastrow, i+1).getValue();
    if(headValue=="生年月日"){
      messageValue = Utilities.formatDate(messageValue, "JST", "yyyy/MM/dd");
    }
    message += headValue + ":";
    message += messageValue + "\n";
  }

以下、順番に見ていきます。

まず、変数「headValue」と「messageValue」を準備して、初期化しています。これらの変数は、ループの中でヘッダー(見出し)とメッセージの値を保持するために使用されます。

次に、forループを使用して、Google Sheetsの列を順番に処理します。lastcolは、処理する列の数を指定する変数です。

ループの中で、sheet.getRange()メソッドを使用して、シートの2行目(ヘッダー)と最終行の値を取得しています。i+1は、列のインデックスを1から始めるために追加されています。

次に、if文で、ヘッダーが「生年月日」である場合には、メッセージの値を日付形式に変換します。下記の部分ですね。

    if(headValue=="生年月日"){
      messageValue = Utilities.formatDate(messageValue, "JST", "yyyy/MM/dd");
    }

Utilities.formatDate()メソッドを使用して、messageValueを「JST」タイムゾーンで「yyyy/MM/dd」の形式にフォーマットしています。

【変換前】
生年月日:Fri Apr 14 2023 00:00:00 GMT+0900 (GMT+09:00)
【変換後】
生年月日:2023/04/14

最後に、message変数に、ヘッダーとメッセージの値を改行区切りで連結して追加しています。

    message += headValue + ":";
    message += messageValue + "\n";

このように、ループを使用して処理することで、特定の条件に応じて値を変換することができます。

以下、今回のコードです。

function doPost(e) {
  // Line Notifyに通知を送信する
  const token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
  let message = '【送信内容】\n';
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastrow = sheet.getLastRow();
  const lastcol = sheet.getLastColumn();
  
  let headValue = "";
  let messageValue = "";
  for (var i = 0; i < lastcol; i++) {
    headValue = sheet.getRange(2, i+1).getValue();
    messageValue = sheet.getRange(lastrow, i+1).getValue();
    if(headValue=="生年月日"){
      messageValue = Utilities.formatDate(messageValue, "JST", "yyyy/MM/dd");
    }
    message += headValue + ":";
    message += messageValue + "\n";
  }

  const options = {
    'method': 'post',
    'headers': { 'Authorization': 'Bearer ' + token },
    'payload': { 'message': message }
  };
  const url = 'https://notify-api.line.me/api/notify';
  UrlFetchApp.fetch(url, options);
}

スクリプトを実行する

スクリプトを実行してみます。

生年月日の表示がyyyy/MM/dd形式になりました!

まとめ

このように設定することで、生年月日の表示をyyyy/MM/dd形式に変更することができます。

URLをコピーしました!