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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

229閲覧

GASで日付変数を複数使っているのでが、1つの変数を変更すると全ての変数が連動して変更される

yuyucchuta

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/09/22 01:54

前提

この度、職場の要望であるシステムを作ることになったのですが、色々検討した結果 googleのプラットフォームが最も作りやすいと判断し、googleフォームを送信した日時を取得して、その日付に応じてフォームの内容を変更し、そしてその内容に応じて返信メールを送るような仕組みを作っています。

ですが、その日付を計算して色々行う部分で、理解が追いつかないトラブルに悩まされています。

私の方は、かれこれ数十年と複数の言語にわたって日常的にちょっとしたスクリプトを開発し続けていますが、GASはようやく6件目となります。
経験不足で、不具合原因がわからない状況のため、何かしらのご教授いただきたいと存じます。

実現したいこと

3つの変数が独立して別々の日付を記録するようにしたい

発生している問題・エラーメッセージ

ある処理を判断するための日付を設定するために

  • 今日の日付:todayDate
  • 起算日:initDate
  • 終了日:termDate

の3つの変数を設定したところ,

  • 3行目 今日の日付->todayDate ・・・問題なし
  • 6行目 todayDate->initDate ・・・問題なし
  • 7行目 initDateの時刻を変更・・・todayDate も同じ値に変更
  • 13行目 termDateの日付を計算・・・todayDate, initDateともに同じ値に変更

なぜ一つの変数を変えると、他も連動して同じ値になってしまうのか?
全く状況がわからず理解が追いついていません。

エラーは起きませんが私にとっては不可解な現象となっています

該当のソースコード

GAS

1function MenuSet(){ 2 // todayDate: 開いた日時 3 var todayDate = new Date; 4 // initDate: 起算日 8:00 AM 以降は翌日扱い 5 6 var initDate = todayDate; 7 initDate.setHours(0,0,0,0); 8 if (todayDate.getHours() > 8){ 9 initDate.setDate(todayDate.getDate()+1); 10 } 11 // termDate: 終了日 起算日から2週間 12 var termDate = initDate; 13 termDate.setDate(initDate.getDate()+14); 14}

試したこと

  • 年月日時を全部バラして、もしくはシリアル値を扱う分には問題は起きない

補足情報(FW/ツールのバージョンなど)

変数については3つとなっていますが、実際にはも2つほど増える予定です。
この3つはよく利用する値であるため、この関数でさっさと計算して確保しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Dateオブジェクトなので
var initDate = todayDate;
としても
todayDateのインスタンスがinitDateに代入される形になるので実体は同じものになります。
値をコピーしたいのであれば
var initDate = new Date(todayDate);
とnewしましょう

投稿2022/09/22 02:18

YAmaGNZ

総合スコア10258

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問