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

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

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

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

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

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

Q&A

解決済

1回答

559閲覧

スプレッドシート上の日付をMoment.jsで取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

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

0グッド

0クリップ

投稿2018/07/18 01:12

編集2018/07/26 05:03

Google Apps Script のスプレッドシートに日付が下のように並んでいるとします。
これを、Moment.jsを使って取得したいのですが、うまくいきません。
最終的には、日付を取得して、期間の計算を行いたいです。

  

開始日期日
2018-06-212018-06-25
2018-06-222018-06-27
2018-06-222018-06-26
2018-06-222018-06-26
2018-06-222018-06-26
2018-06-202018-06-28
2018-06-232018-06-30

例)
2018-06-23

6/23
と取得したい。
###コード

JavaScript

1//開始日の取得 2var start_date = sheet1.getRange(i,3).getValues(); 3var start_date = Moment.moment(start_date,'MM/DD'); 4//期日の取得 5var end_date = sheet1.getRange(i,4).getValues(); 6var end_date = Moment.moment(end_date,'MM/DD'); 7 8//期間の計算 9var NOD_se_date = end_date.diff(start_date,'days');

###追記:エラー
試しに、日付が取得できているか以下のプログラムで確認。

JavaScript

1function test(){ 2 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet1 = spreadsheet.getSheetByName('全チケット情報'); 4 5 var lastRow_i = sheet1.getLastRow(); 6 7 for(var i = lastRow_i;i>=2;i--){ 8 var start_date = sheet1.getRange(i,3).getValue(); 9 var start_date = Moment.moment(start_date).format('MM/DD'); 10 11 var end_date = sheet1.getRange(i,4).getValue(); 12 var end_date = Moment.moment(end_date).format('MM/DD'); 13 14 var NOD_se_date = end_date.diff(start_date,'days'); 15 Logger.log(start_date); 16 Logger.log(end_date); 17 Logger.log(NOD_se_date); 18 } 19}

すると、以下のログが表示。
日付の取得まではOK。

[18-07-18 12:31:36:821 JST] 06/18 [18-07-18 12:31:36:821 JST] 06/20 [18-07-18 12:31:36:907 JST] 06/19 [18-07-18 12:31:36:908 JST] 06/24 [18-07-18 12:31:36:990 JST] 06/19

しかし、期間の計算で今度はエラーが出る。

JavaScript

1var NOD_se_date = end_date.diff(start_date,'days'); 2->TypeError: オブジェクト 06/20 で関数 diff が見つかりません。 3

どうしたものか。。

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

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

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

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

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

m.ts10806

2018/07/18 01:22

「うまく動作しない」「うまくいかない」では何が起きているか伝わりません。「○○のようになるはずなのに××となってしまう」のような形で「ゴール」と「現象(エラーメッセージなども含む)」を明確にしてください。https://teratail.com/help/question-tips#questionTips3-4-1
guest

回答1

0

ベストアンサー

###期間の計算も以下の方法で解決
var get_start = sheet1.getRange(i,3).getValue();
でスプレッドシートの日付を取得すると、デフォルトでは、
Mon Jun 18 2018 00:00:00 GMT+0900 (JST)
と取得される。
これを、
var start = Moment.moment(get_start);
とすることで、
1529247600000
というsec表示形式になる。

どうも、期間(diff)の計算は「1529247600000」のような文字列では計算できるようだ。。。

JavaScript

1function test(){ 2 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet1 = spreadsheet.getSheetByName('sheet'); 4 var lastRow_i = sheet1.getLastRow(); 5 6 for(var i = lastRow_i;i>=2;i--){ 7 //開始日 8 var get_start = sheet1.getRange(i,3).getValue(); 9 var start = Moment.moment(get_start); 10 var start_date = Moment.moment(get_start).format('M/D'); 11 //期日 12 var get_end = sheet1.getRange(i,4).getValue(); 13 var end_date = Moment.moment(get_end).format('M/D'); 14 var end = Moment.moment(get_end); 15 //期間の計算 16 var NOD_se_date = end.diff(start,'days',true);//,trueで小数点まで計算 17 18 Logger.log('start '+start_date); 19 Logger.log('end '+end_date); 20 Logger.log(NOD_se_date); 21 } 22}

投稿2018/07/18 05:17

編集2018/07/26 05:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問