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

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

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

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

Q&A

2回答

2658閲覧

GASで日付の減算をした際日付がずれる

keiootee

総合スコア10

Google Apps Script

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

0グッド

1クリップ

投稿2019/02/25 09:49

前提・実現したいこと

Googleスプレッドシートと連動した週次レポートを作成しています。
特定のセルについては、作成日を起点として自動で日付を入れられるように組んでいます。

毎週水曜に火曜段階で集計した前週の数字についてレポート出力を想定しています。
そこで、
・A: シートのタイトル部分には「レポート期間の開始日=一週間前の月曜日=9日前」
・B: シートの右上には「数字集計日=昨日の値=1日前」
を入れるスクリプトを組みました。

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

スプレッドシート、GASプロジェクトそれぞれのプロジェクト設定は「JST」に設定しており、
スクリプトでは「JST」と指定していますが、
レポートとして返される結果がJSTを計算したものではないようです。

詳細分からないのですが、GMTを基準にしているように見えます。
そのため、朝実行すると日付が一日ずれてしまいます。

該当のソースコード

GAS

1 var nowDate = new Date(); //日付を取得 2 var nowDate = new Date(nowDate.getYear(), nowDate.getMonth(), nowDate.getDate()); //形式変更 3 var reportweek = new Date(nowDate.getYear(), nowDate.getMonth(), nowDate.getDate() - 9); //★一週間前の月曜の値に 4 var reportweekend = new Date(nowDate.getYear(), nowDate.getMonth(), nowDate.getDate() - 1); //★昨日 (火曜日) の日付に 5 var reportweekstart_format = Utilities.formatDate(reportweek,"JST","YYYYMMdd"); 6 var reportweek_format = Utilities.formatDate(reportweek,"JST","YYYY年MM月dd日"); //A出力 7 var reportweekend_format = Utilities.formatDate(reportweekend,"JST","YYYYMMdd"); //B出力

試したこと

  • スクリプトの [実行] ※自分のブラウザ時間なら成功します
  • ★をつけた部分の値変更の数字を1日変更する。※GASの実行時間に依存してしまうため、本質的な解決ではないと考えています。

解決方法として考えていること

nowDateの段階で、JSTを指定して日付を取得すると、解決しそうなのですが、
実現可能か分かっていません。

よろしくお願いいたします。

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

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

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

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

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

papinianus

2019/02/26 05:02

書いておられることをgoogleの用語に添って指定していただけますか? > スプレッドシート、GASプロジェクトそれぞれのプロジェクト設定は「JST」に設定しており、 これは「ファイル」→「スプレッドシートの設定」や「ファイル」→「プロジェクトのプロパティ」で、タイムゾーンがGMT+9になっているという意味で良いですか? > スクリプトでは「JST」と指定していますが、レポートとして返される結果がJSTを計算したものではないようです。 どういう意味えすか?「レポートとして返される結果」というのが分かりません。表示した日付がずれているという意味でよいですか? > 詳細分からないのですが、GMTを基準にしているように見えます。そのため、朝実行すると日付が一日ずれてしまいます。 内部的にはGMTで計算されます。問題はGMT+9のタイムゾーンがあるかどうかです。 > スクリプトの [実行] ※自分のブラウザ時間なら成功します これは午前9時以前に、ブラウザで関数の実行をしても日付がずれない、という意味で良いですか?
guest

回答2

0

JSTは、もう使えないみたいですね。Asia/Tokyoに変更しましょう。
https://qiita.com/soundTricker/items/21d3a39222fb1edbce57

投稿2020/05/12 05:19

TakayukiNakajo

総合スコア23

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

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

0

nawDateを以下のようにして、無理やり日本時間に再計算させてしまってはどうでしょうか?

GAS

1var timezoneoffset = -9; 2 var nowDate = new Date(new Date() - (timezoneoffset * 60 - new Date().getTimezoneOffset()) * 60000);

投稿2019/02/26 03:01

hiroshi0240

総合スコア640

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問