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

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

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

Q&A

解決済

2回答

5333閲覧

【GAS】【Javascript】2次元配列内の日付データすべてを”yyyy/MM/dd”の形式に変換したい。

pear

総合スコア1

JavaScript

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

0グッド

0クリップ

投稿2021/09/02 02:19

前提・実現したいこと

プログラミング初心者です。
誤った表現等ありましたらすみません。
GASでGoogleスプレッドシートの表Aを別シートのテーブルA’に転記する処理を組んでいます。

表A:20×5程度の表。一日ひとつ作成する。
↓GASで自動転記
テーブルA':日付をキーに表Aの内容を横持ちで保持するテーブル。1日1レコード追加されていくイメージ。

この中で、
「本日の日付と同日の日付がテーブルA'の日付カラム上になければ、テーブルA'新たにレコードを追加する。
あれば、そのレコードの内容を上書きする」という処理を組みたいのですが、
「本日の日付と同日の日付がテーブルA'の日付カラム上になければ」の条件分岐の部分で詰まっております。
本日の日付もテーブルA'の日付カラムの情報も、どちらも日付型なので、このままでは比較ができないということで、別の型に変換しようと思っているのですが、それが上手くいきません。

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

テーブルA'の日付カラムの情報(日付型が格納された2次元配列)を、すべてyyyy/MM/ddの形式に変換したいが、変換されず、日付型のまま値が返ってくる。

テーブルA'日付カラムには、
2021/08/23,...,2021/08/31 が記載されている。

[ Mon Aug 23 2021 00:00:00 GMT+0900 (Japan Standard Time) ], [ Tue Aug 24 2021 00:00:00 GMT+0900 (Japan Standard Time) ], [ Wed Aug 25 2021 00:00:00 GMT+0900 (Japan Standard Time) ], [ Thu Aug 26 2021 00:00:00 GMT+0900 (Japan Standard Time) ], [ Fri Aug 27 2021 00:00:00 GMT+0900 (Japan Standard Time) ], [ Sat Aug 28 2021 00:00:00 GMT+0900 (Japan Standard Time) ], [ Sun Aug 29 2021 00:00:00 GMT+0900 (Japan Standard Time) ], [ Mon Aug 30 2021 00:00:00 GMT+0900 (Japan Standard Time) ], [ Tue Aug 31 2021 00:00:00 GMT+0900 (Japan Standard Time) ]

該当のソースコード

Javascript

1 2function postDb() { 3 //処理に使用するシート・セルを取得 4 const ss = SpreadsheetApp.getActiveSpreadsheet(); 5 const input = ss.getSheetByName('Input'); //表A 6 const table = ss.getSheetByName('Table'); //テーブルA' 7 8 // 本日日付を取得 9 let today = new Date(); 10 today.setHours(0,0,0,0); //時、分、秒、ミリ秒を0にならす 11 today = Utilities.formatDate(today, 'JST', 'yyyy/MM/dd') //yyyy/MM/dd方式に変換 12 13 //テーブルA'内の日付カラムの情報をyyyy/MM/ddに変換する 14 let date = table.getRange(2,1,table.getLastRow()-1).getValues(); //日付カラム2行目から最終行まで取得 15 //date配列内の要素をmap関数で1つずつ変換する。 16 for(let i=0; i<date.lengh; i++){ 17 let dt = date[i].map( 18 function(x){ 19 return x = Utilities.formatDate(x, 'JST', 'yyyy/MM/dd'); 20 }); 21 date[i] = dt; 22 } 23 console.log(date) 24}

試したこと

date[i]をdate[i][0]にするなどしてみましたが意味ありませんでした。

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

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

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

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

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

guest

回答2

0

コードのスペリングミスは他の回答者の指摘の通りですが、

本日の日付もテーブルA'の日付カラムの情報も、どちらも日付型なので、このままでは比較ができないということで、別の型に変換しようと思っているのですが、

比較するのに、わざわざ文字列型にする必要はありません。getTime()の値(日時をミリ秒単位の数値にしたもの)で比較しましょう。

テーブルの日付のデータはそのまま日付型にしておき、今日の日付(new Date()の時、分、秒、ミリ秒を0にしたもの)のgetTime()の値と、二次元配列dateの要素date[0][0], date[1][0], date[2][0], ……に格納された日付型のデータ(時、分、秒、ミリ秒は最初から0の状態)のgetTime()の値を比較してください。

投稿2021/09/02 03:48

編集2021/09/02 03:49
Daregada

総合スコア11990

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

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

0

ベストアンサー

for(let i=0; i<date.lengh; i++){

lengthですね。

投稿2021/09/02 02:40

編集2021/09/02 02:53
itagagaki

総合スコア8402

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

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

pear

2021/09/02 02:47

解決です…まさかのスペルミスでした…。 エラーせずに動いちゃうこともあるんですね。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問