質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.38%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Q&A

1回答

67閲覧

Googleフォーム スクリプトエディタ 日付の表示方法

MOMIJI

総合スコア0

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

0グッド

0クリップ

投稿2024/10/11 14:11

実現したいこと

以下のコードを使って、Googleフォームを作っているのですが、
自動返信メールの日付の解答が
Fri Oct 11 2024 22:53:34 GMT+0900 (Japan Standard Time)
となってしまいます。
これを

2024年10月11日 金曜日

と表示させるにはどうしたら良いでしょうか??

発生している問題・分からないこと

調べて調整しても日付が「Fri Oct 11 2024 22:53:34 GMT+0900 (Japan Standard Time)」のままとなってしまう

該当のソースコード

function auto_reply() { // 自動返信メールの件名 var title = "【】レンタル事前予約のお申込みありがとうございます"; // 自動返信メールの本文1(\nは改行) var body = "この度はレンタル事前予約のお申込みいただき、誠にありがとうございます。\n" + "お申込みいただいた内容は次の通りです。\n\n" + "-------------------------------------------\n\n"; // 自動返信メールの本文2(\nは改行) var body2 = "※このメールは配信専用です。\n" + "本メールへの返信には回答を差し上げておりませんのでご了承ください。\n" + "お申込みのキャンセル・変更は、直接お問い合わせください。\n" + "TEL:0241-37-1111\n\n" + "-------------------------------------------\n\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n\n" + "-------------------------------------------\n\n"; // 本文作成用の変数 var sheet = SpreadsheetApp.getActiveSheet(); var row = sheet.getLastRow(); var column = sheet.getLastColumn(); var range = sheet.getDataRange(); // メールアドレス保存用の変数(最後のメール送信時に使用。) var mail = ""; // ページ区切りのためのページごとの項目名リスト var pageBreakHeaders = ['レンタルお渡し場所', '備考']; // 各ページの開始質問項目名 for (var i = 1; i <= column; i++ ) { // スプレッドシートの入力項目名を取得 var header = range.getCell(1, i).getValue(); // スプレッドシートの入力値を取得 var value = range.getCell(row, i).getValue(); // 本文1(body)にスプレッドシートの入力項目を追加 body += "■" + header + "\n"; // 本文1(body)にフォームの入力内容を追加 if (value instanceof Date) { // 日付の場合は日本語形式にフォーマット value = Utilities.formatDate(value, Session.getScriptTimeZone(), 'yyyy年MM月dd日'); } body += value + "\n\n"; // スプレッドシートの入力項目が「代表者名」の場合は、「様」を付け本文の前に追加 if (header === 'ご宿泊者代表者名') { body = value + "様\n\n" + body; } // フォームの入力項目が「メールアドレス」の場合は、変数mailに代入 if (header === 'メールアドレス') { mail = value; } // ページ区切りのための区切り線を挿入 if (pageBreakHeaders.includes(header)) { body += "-------------------------------------------\n\n"; } } // 本文1に本文2を追加 body += body2; // 宛名=mail、件名=title、本文=bodyで、メールを送る GmailApp.sendEmail(mail, title, body); }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果
if (value instanceof Date) { // 日付の場合は日本語形式にフォーマット value = Utilities.formatDate(value, Session.getScriptTimeZone(), 'yyyy年MM月dd日'); }

調べて、既に上記の記述を加えているのですが上手くいきません....

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

プロンプトクリエーターのmike2mike4です。そもそも日本語の曜日はmethodでサポートされておりませんので、AIに質問したのが以下となります。質問者さんも生成AIを利用されると良いでしょう。

Googleフォームから送信されたデータを基に自動返信メールを生成する際に、日付が期待通りの形式(2024年10月11日 金曜日)で表示されず、Fri Oct 11 2024 22:53:34 GMT+0900 (Japan Standard Time)のようになってしまう問題について、解決方法をご案内いたします。

問題の原因と解決策

現状のコードでは、Utilities.formatDateを使用して日付をyyyy年MM月dd日形式にフォーマットしていますが、曜日が含まれておらず、また期待する形式に適切に変換されていない可能性があります。以下の手順で問題を解決しましょう。

  1. 日付オブジェクトの確認

    まず、valueが正しくDateオブジェクトとして認識されているか確認します。場合によっては、Dateオブジェクトではなく文字列として扱われている可能性があります。

  2. 曜日の取得と日本語表示の追加

    Utilities.formatDateでは曜日を直接フォーマットすることができないため、Dateオブジェクトから曜日を取得し、日本語の曜日名を追加する必要があります。

  3. フォーマットの適用

    日付部分と曜日部分を結合して、希望の形式に整えます。

修正後のコード

以下に、修正後のコードの該当部分を示します。既存のauto_reply関数内のforループ内に変更を加えています。

javascript

1function auto_reply() { 2 // 自動返信メールの件名 3 var title = "【】レンタル事前予約のお申込みありがとうございます"; 4 5 // 自動返信メールの本文1(\nは改行) 6 var body 7 = "この度はレンタル事前予約のお申込みいただき、誠にありがとうございます。\n" 8 + "お申込みいただいた内容は次の通りです。\n\n" 9 + "-------------------------------------------\n\n"; 10 11 // 自動返信メールの本文2(\nは改行) 12 var body2 13 = "※このメールは配信専用です。\n" 14 + "本メールへの返信には回答を差し上げておりませんのでご了承ください。\n" 15 + "お申込みのキャンセル・変更は、直接お問い合わせください。\n" 16 + "TEL:0241-37-1111\n\n" 17 + "-------------------------------------------\n\n" 18 + "\n" 19 + "\n" 20 + "\n" 21 + "\n" 22 + "\n" 23 + "\n\n" 24 + "-------------------------------------------\n\n"; 25 26 // 本文作成用の変数 27 var sheet = SpreadsheetApp.getActiveSheet(); 28 var row = sheet.getLastRow(); 29 var column = sheet.getLastColumn(); 30 var range = sheet.getDataRange(); 31 32 // メールアドレス保存用の変数(最後のメール送信時に使用。) 33 var mail = ""; 34 35 // ページ区切りのためのページごとの項目名リスト 36 var pageBreakHeaders = ['レンタルお渡し場所', '備考']; // 各ページの開始質問項目名 37 38 // 曜日を日本語で表示するための配列 39 var weekdays = ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日']; 40 41 for (var i = 1; i <= column; i++ ) { 42 // スプレッドシートの入力項目名を取得 43 var header = range.getCell(1, i).getValue(); 44 // スプレッドシートの入力値を取得 45 var value = range.getCell(row, i).getValue(); 46 47 // 本文1(body)にスプレッドシートの入力項目を追加 48 body += "■" + header + "\n"; 49 50 // 本文1(body)にフォームの入力内容を追加 51 if (value instanceof Date) { 52 // 日付の場合は日本語形式にフォーマット 53 var dayOfWeekNumber = value.getDay(); // 0=日曜日, ..., 6=土曜日 54 var dayOfWeekJapanese = weekdays[dayOfWeekNumber]; 55 var formattedDate = Utilities.formatDate(value, Session.getScriptTimeZone(), 'yyyy年MM月dd日'); 56 value = formattedDate + ' ' + dayOfWeekJapanese; 57 } 58 body += value + "\n\n"; 59 60 // スプレッドシートの入力項目が「ご宿泊者代表者名」の場合は、「様」を付け本文の前に追加 61 if (header === 'ご宿泊者代表者名') { 62 body = value + "様\n\n" + body; 63 } 64 65 // フォームの入力項目が「メールアドレス」の場合は、変数mailに代入 66 if (header === 'メールアドレス') { 67 mail = value; 68 } 69 70 // ページ区切りのための区切り線を挿入 71 if (pageBreakHeaders.includes(header)) { 72 body += "-------------------------------------------\n\n"; 73 } 74 } 75 76 // 本文1に本文2を追加 77 body += body2; 78 79 // 宛名=mail、件名=title、本文=bodyで、メールを送る 80 GmailApp.sendEmail(mail, title, body); 81}

詳細な修正点

  1. 曜日配列の追加

    javascript

    1var weekdays = ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'];

    これにより、曜日番号を日本語の曜日名に対応付けます。

  2. 日付と曜日のフォーマット

    javascript

    1if (value instanceof Date) { 2 // 日付の場合は日本語形式にフォーマット 3 var dayOfWeekNumber = value.getDay(); // 0=日曜日, ..., 6=土曜日 4 var dayOfWeekJapanese = weekdays[dayOfWeekNumber]; 5 var formattedDate = Utilities.formatDate(value, Session.getScriptTimeZone(), 'yyyy年MM月dd日'); 6 value = formattedDate + ' ' + dayOfWeekJapanese; 7}
    • value.getDay()で曜日の番号を取得。
    • weekdays配列を使用して日本語の曜日名を取得。
    • Utilities.formatDateで日付部分をyyyy年MM月dd日形式にフォーマット。
    • 日付と曜日を結合してvalueに再代入。

デバッグのための追加手順

もし上記の修正を行っても期待通りに動作しない場合、以下の手順でデバッグを行ってください。

  1. ログの追加

    Logger.logを使用して、valueの型と内容を確認します。

    javascript

    1if (value instanceof Date) { 2 Logger.log('Date detected: ' + value); 3 // 既存のフォーマット処理 4} else { 5 Logger.log('Non-Date value: ' + value + ' (Type: ' + typeof value + ')'); 6}

    スクリプト実行後、ログ(「表示」→「ログ」)を確認して、valueが正しくDateオブジェクトとして認識されているか確認します。

  2. スプレッドシートのデータ形式確認

    スプレッドシート側で日付が正しく日付形式として認識されているか確認してください。場合によっては、文字列として保存されている可能性があります。

  3. タイムゾーンの確認

    Session.getScriptTimeZone()が正しいタイムゾーンを返しているか確認します。必要に応じて、タイムゾーンを明示的に指定することも検討してください。

    例:

    javascript

    1var formattedDate = Utilities.formatDate(value, 'Asia/Tokyo', 'yyyy年MM月dd日');

まとめ

以上の修正と確認を行うことで、Googleフォームから送信された日付が自動返信メールにおいて2024年10月11日 金曜日の形式で正しく表示されるようになるはずです。特に、Dateオブジェクトとして正しく認識されていることと、曜日の取得・表示が適切に行われていることが重要です。

投稿2024/10/11 16:13

mike2mike4

総合スコア934

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.38%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問