日付をシリアル変換したところ
下記のようにおなじ日付なのに違うシリアル値が返ってきました
シリアル値で日付を判別し、昨日までの行を削除しようとしたところ
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
何が問題なのかさっぱりわかりません
日付(Dateオブジェクト)の値は日付だけでなく時刻(ミリ秒まで)を含んだ日時の値になるので、
new Date()で生成した日付はその時の時刻が含まれていますが、
シートに日付だけを入力したセルの値を取得した場合は時刻が0時0分0秒0ミリ秒となるので
違いがあると思いますよ。
なるほどです
スプレッドシートに記載した日付は確かに時刻は含まれていません
よいか悪いかは別として、
スプレッドシートから取得した日付に限り
+1で下駄をはかせることで対処するのは問題ないのでしょうか?
夜間1~4時の間で本日の日付よりも前の行を削除しようと考えています
よろしくお願いします
let d = new Date();
のあとに
d.setHours(0, 0, 0, 0);
とすることで時刻をクリアできます。
ありがとうございます
その後いろいろ調べ、午前9時より前か後かで違うことがわかりました
日が変わった夜間の処理なので 結果的にシリアル値は
同じになることがわかりました(テストは9時以降なので差が出たことも
わかりました)
d.setHours(0, 0, 0, 0); にて時刻クリア
非常にありがたい回答です
これで時間を気にする必要は無いようなので
これを採用させて頂きます
ありがとうございました
d.setHours(0, 0, 0, 0); だと、Math.floor(d.getTime() / 86400000) の値的には前日になるので、それで良ければですが。一致するかどうかだけに使うのなら前日ベースでOKですね。
締め切りの方法がわからず・・
コメントではなく回答をされている
otn様の回答をベストに選んでください。

回答2件
あなたの回答
tips
プレビュー