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

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

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

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

Q&A

解決済

2回答

807閲覧

GASで日付を計算した際にずれて計算されてしまう

gonngonn

総合スコア3

Google Apps Script

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

0グッド

0クリップ

投稿2022/04/15 07:57

GASで、日付が入った行を取得
→ 取得した日付を1日前、3日前、・・
と計算して出した日付をシートに書き込むことを想定しています。
ですが、

GAS

1function Dayire() { 2 const ss = SpreadsheetApp.getActiveSpreadsheet(); 3 const Sheet = ss.getSheetByName('スケジュール管理表'); 4 const MasterHiduke = Sheet.getDataRange().getValues(); 5 6 ///未作業の行だけ抜き出す+行番号 7 const HeaderHiduke = MasterHiduke.shift(), cIndex = {}; 8 for (var i = 0; i < HeaderHiduke.length; i++) cIndex[HeaderHiduke[i]] = i; 9 10 //作業状態が未作業の行だけを取得して配列化 11 const FileHiduke = MasterHiduke 12 .filter(function(e){return e[cIndex['日付確定']] === '未作業'}) 13 .map(function(e){ 14 const Columns = [ 15 16 cIndex['行番号'], 17 cIndex['開催日'], 18 19 ], row = []; 20 for (var i = 0; i < Columns.length; i++) row.push(e[Columns[i]]); 21 return row; 22 }); 23 console.log(FileHiduke); 24 25 for( var i = 0 ; i< FileHiduke.length ; i++){ 26 //開催日 27 const Kaisaibi0 = FileHiduke[i][1]; 28 var Kaisaibi = Utilities.formatDate( Kaisaibi0, 'Asia/Tokyo', 'yyyy/MM/dd'); 29 30 //1日前 31 const D1mae0 = Kaisaibi0; 32 D1mae0.setDate(D1mae0.getYear(), D1mae0.getMonth(),D1mae0.getDate() - 1); 33 34 var D1mae = Utilities.formatDate( D1mae0, 'Asia/Tokyo', 'yyyy/MM/dd'); 35 console.log('[開催日] ',Kaisaibi0); 36 console.log('[D1mae0] ',D1mae0); 37 console.log(D1mae); 38 39 //3日前 40 const D3mae0 = Kaisaibi0; 41 D3mae0.setDate(D3mae0.getYear(), D3mae0.getMonth(),D3mae0.getDate() - 3); 42 var D3mae = Utilities.formatDate( D3mae0, 'Asia/Tokyo', 'yyyy/MM/dd'); 43 console.log('[開催日] ',Kaisaibi0); 44 console.log('[D3mae0] ',D3mae0); 45 console.log(D3mae); 46 47 48 } 49} 50

で作ってみたところ、

16:43:57 情報 [ [ 74, Thu Jul 21 2022 11:00:00 GMT-0400 (Eastern Daylight Time) ] ] 16:43:57 情報 [開催日] Sun Oct 30 2022 11:00:00 GMT-0400 (Eastern Daylight Time) 16:43:57 情報 [D1mae0] Sun Oct 30 2022 11:00:00 GMT-0400 (Eastern Daylight Time) 16:43:57 情報 2022/10/31 16:43:57 情報 [開催日] Mon Jan 30 2023 11:00:00 GMT-0500 (Eastern Standard Time) 16:43:57 情報 [D3mae0] Mon Jan 30 2023 11:00:00 GMT-0500 (Eastern Standard Time)

となってしまい、日付を正しく計算できません、。
もし間違いがあればご教示いただきたく、お願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/04/15 08:15

var Kaisaibi はどこにも使われていないようです。
int32_t

2022/04/15 08:54 編集

元のデータ FileHiduke[i][1] にはシート上ではどういうデータが入っていて、このコードでの期待される結果はどういうものなのでしょうか。
guest

回答2

0

ベストアンサー

js

1 D1mae0.setDate(D1mae0.getYear(), D1mae0.getMonth(),D1mae0.getDate() - 1);

setDate() は「日」を設定する関数ですから、引数は1つしかありません。2022年7月21日(?) に setDate(122) (2022 - 1900) を呼んで 101 日ほど前に進めようとしています。

やりたかったことは単に D1mae0.setDate(D1mae0.getDate() - 1) でしょう。

投稿2022/04/15 09:00

int32_t

総合スコア20884

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

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

gonngonn

2022/04/15 09:11

ありがとうございます!確かにそうだ・・。こちらでまた覚えたいと思います!
guest

0

D1mae0とD3mae0をconstで宣言しているため、その次のsetDateで値を入れられていないのではないでしょうか。

投稿2022/04/15 08:39

mkk

総合スコア378

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

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

int32_t

2022/04/15 09:01

JavaScriptの const はそういう意味ではないです。
gonngonn

2022/04/15 09:11

回答、ありがとうございました!
int32_t

2022/04/15 09:14

変数への再代入不可であって、変数が指すオブジェクトの状態を変えることはできます。
kei344

2022/04/15 09:17

【const - JavaScript | MDN】 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/const#%E8%A7%A3%E8%AA%AC > const 宣言は、値への読み取り専用の参照を作ります。これは、定数に保持されている値は不変ではなく、その変数の識別子が再代入できないということです。たとえば、定数の中身がオブジェクトの場合、オブジェクトの内容(プロパティなど)は変更可能です。
mkk

2022/04/15 09:19

なるほど、勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問