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

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

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

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

Q&A

解決済

2回答

587閲覧

同じ日付なのにシリアル値が違う

punpun21

総合スコア24

Google Apps Script

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

0グッド

1クリップ

投稿2023/08/10 06:28

日付をシリアル変換したところ
下記のようにおなじ日付なのに違うシリアル値が返ってきました
シリアル値で日付を判別し、昨日までの行を削除しようとしたところ
1日の差が出ました
以下に状況を整理してみました

function シリアル(){
let d = new Date();
Logger.log(d);
d = Math.floor(d.getTime() / 86400000) + 25569;
Logger.log(d);
let t = shForm.getRange(6,2).getValue();
Logger.log(t);
t = Math.floor(t.getTime() / 86400000) + 25569;
Logger.log(t);
}

実行ログ
15:26:51 情報 Thu Aug 10 15:26:51 GMT+09:00 2023
15:26:51 情報 45148.0
15:26:51 情報 Thu Aug 10 00:00:00 GMT+09:00 2023
15:26:51 情報 45147.0

何が問題なのかさっぱりわかりません

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

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

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

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

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

YellowGreen

2023/08/10 06:44

日付(Dateオブジェクト)の値は日付だけでなく時刻(ミリ秒まで)を含んだ日時の値になるので、 new Date()で生成した日付はその時の時刻が含まれていますが、 シートに日付だけを入力したセルの値を取得した場合は時刻が0時0分0秒0ミリ秒となるので 違いがあると思いますよ。
punpun21

2023/08/10 07:10

なるほどです スプレッドシートに記載した日付は確かに時刻は含まれていません よいか悪いかは別として、 スプレッドシートから取得した日付に限り +1で下駄をはかせることで対処するのは問題ないのでしょうか? 夜間1~4時の間で本日の日付よりも前の行を削除しようと考えています よろしくお願いします
YellowGreen

2023/08/10 07:36

let d = new Date(); のあとに d.setHours(0, 0, 0, 0); とすることで時刻をクリアできます。
punpun21

2023/08/10 07:59

ありがとうございます その後いろいろ調べ、午前9時より前か後かで違うことがわかりました 日が変わった夜間の処理なので 結果的にシリアル値は 同じになることがわかりました(テストは9時以降なので差が出たことも わかりました) d.setHours(0, 0, 0, 0); にて時刻クリア 非常にありがたい回答です これで時間を気にする必要は無いようなので これを採用させて頂きます ありがとうございました
otn

2023/08/10 09:40

d.setHours(0, 0, 0, 0); だと、Math.floor(d.getTime() / 86400000) の値的には前日になるので、それで良ければですが。一致するかどうかだけに使うのなら前日ベースでOKですね。
YellowGreen

2023/08/16 22:48 編集

締め切りの方法がわからず・・ コメントではなく回答をされている otn様の回答をベストに選んでください。
guest

回答2

0

otnさんありがとうございます
地球が丸いことがすっかり頭の中から抜け落ちていたようです

ただ、すみません YellowGreenさんの回答にて着地点とさせて頂きますが
締め切りの方法がわからず・・

投稿2023/08/10 08:31

punpun21

総合スコア24

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

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

0

ベストアンサー

時差の補正が要りますね。JSTで同じ日でも、9時以前はUTC(GMT)だと前日になるのはおわかりだと思います。
getTime()は、1970-01-01 00:00:00 UTC からのミリ秒です。

投稿2023/08/10 08:27

otn

総合スコア86309

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問