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

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

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

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

JavaScript

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

Q&A

解決済

1回答

7531閲覧

GAS上での日付からUNIXタイムスタンプへの変換

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

JavaScript

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

0グッド

0クリップ

投稿2019/08/30 19:56

編集2019/08/31 00:03

閲覧いただきありがとうございます。
アドバイス、ご回答のほうよろしくお願い致します。

実現したいこと

Google Apps Script上にて以下のことをしようと取り組んでいます。

  1. PocketのAPIで記事情報を取得
  2. 取得する際に日時を指定して対象を絞り込む

発生している問題

上記の「2」で日時指定する際にUNIXタイムスタンプを使用する必要があるのですが、日時からUNIXタイムスタンプへの変換のところで結果が思うようにならず詰まっています。下記が該当部分のコードです。

GoogleAppsScript

1// 前日の日付を取得 2var yesterday = new Date(); 3yesterday.setDate(yesterday.getDate() - 1); 4var year = yesterday.getFullYear(); 5var month = ("0" + (yesterday.getMonth() + 1)).slice(-2); // 桁を2桁に加工 6var date = ("0" + yesterday.getDate()).slice(-2); // 桁を2桁に加工 7 8// UNIXタイムスタンプに変換 9yesterday = year + "/" + month + "/" + date; 10yesterday = Date.parse(yesterday + " 00:00:00 GMT+0900"); // 年月日は「2019/08/30」が入っているという想定 11Logger.log(yesterday); // 1.5670908E12

変数yesterdayに最終的に入る値が「1567090800000」となるのが正常なのかなと思っています。しかし、GAS上で実行すると「1.5670908E12」となってしまうため、APIに渡す値として使用できない状態です。値としてみると.を除けば途中までは共通点があるので、GAS上で何かしらの変換などの処理が行われてしまっているのでしょうか?

上記のコードをローカルのHTMLに記述して実行したときは結果が「1567090800000」となりました。

下記のコードも書いて試したのですが結果は同じでした。

GoogleAppsScript

1var today = new Date(); 2yesterday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1); 3Logger.log.log(yesterday.getTime());

回答を踏まえて修正したコード

GoogleAppsScript

1var yesterday = new Date(); 2yesterday.setDate(yesterday.getDate() - 1); 3var year = yesterday.getFullYear(); 4var month = ("0" + (yesterday.getMonth() + 1)).slice(-2); // 桁を2桁に加工 5var date = ("0" + yesterday.getDate()).slice(-2); // 桁を2桁に加工 6 7// UNIXタイムスタンプに変換 8yesterday = year + "/" + month + "/" + date; 9yesterday = Date.parse(yesterday + " 00:00:00 GMT+0900"); // 年月日は「2019/08/30」が入っているという想定 10yesterday = yesterday / 1000; // 1行上で出力されるのはミリ秒なので1000で割って秒にする。ミリ秒だとPocketAPIから記事データが返ってこない。 11 12Logger.log(yesterday); // 1.5670908E9 指数表記 13Logger.log(yesterday + ""); // 1567090800 整数表記 数値ではなく文字列として扱うことで整数で表示できる 14Logger.log(yesterday.toFixed()); // 1567090800 toFixedメソッドを使用することでも整数表記にできる

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

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

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

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

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

querykuma

2019/08/30 21:40

1.5670908E12は1.5670908*10^12という意味です。
guest

回答1

0

ベストアンサー

gas

1x=1567090800000; 2Logger.log('%s と %s', x, x+'');

の結果は「1.5670908E12 と 1567090800000」になります。

投稿2019/08/30 21:42

querykuma

総合スコア777

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

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

退会済みユーザー

退会済みユーザー

2019/08/30 23:23

回答ありがとうございます。質問への追記・修正での回答も拝見しました。 頂いた回答をヒントに調べました。「1.5670908E12」は指数表記というものなのですね。最初、「^12」の意味がわからなかったのですが、調べてみると12乗のことなのだとわかりました。そして「E」が「*10」だと。 GASでは__数値の桁数が多いとき&ログなどで表示するとき__に指数表記になる、という認識になったのですがそれで問題ないでしょうか。以下のコードを試したところ、2つ目の`%s`は計算結果後のものが出力されたことから、処理の中での表記は変わらないものと判断しています。 ```gas x=1567090800000 * 2; Logger.log('%s と %s', x, x+''); ``` querykumaさんが示されているコードで2つ目の`%s`が指数表記されないのは、数値に空の文字列を結合することでそのまま表記できているのですね。その点も勉強になりました。
querykuma

2019/08/31 00:41

その認識で問題ないと思います。 数値が長いと見にくいのでLogger.logが気を利かせて指数表記で表示しているようです。 2つ目は変数xを数値型から文字列型に型変換しています。
退会済みユーザー

退会済みユーザー

2019/08/31 02:03

問題ないとのことで安心しました。おかげさまで問題や疑問を解消できて次に進めます。 また質問することがあると思いますので、よろしければその際も回答いただけると幸いです。 どうもありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問