質問: date; endtime.setHours(endtime.getHours() + 1); //なぜかstarttimeまで時刻が書き換えられてしまう Logger.log(starttime); Logger.log(endtime); /* 実現したいことは、 starttimeが13時30分 endtimeが14時30分 となることです。 */ } ```
回答: starttimeが書き換えられるのは、`var endtime = date;`の部分で、endtime変数にdate変数を代入しているからです。 JavaScriptでは、オブジェクトを別の変数に代入すると参照渡しとなり、代入先の変数を書き換えると、元の変数も書き換わってしまいます。 date変数は`var starttime = date;`の部分でstarttime変数にも代入されているので、endtime変数を書き換えるとdate変数が変わり、それによってstarttime変数も変わります。 回避するには、「dateオブジェクトに年や月などを順に突っ込む」処理だけを関数として切り出したうえで、starttimeとendtimeをそれぞれ`new Date();`として別々のオブジェクトになるように作り、双方に前述の関数を適用することなどが考えられます。