今回はDateオブジェクトのgetTime()メソッドについて解説していきます。
前回の記事で、getTime()メソッドは「とある起点からの経過ミリ秒を取得するメソッド」だと書きました。
もし前回の記事をご覧になりたければ、こちらをクリックしてくださいね。
そこのところを詳しく見ていきましょう!
まず前回同様に、変数todayに今日の日時を格納してみましょう。ちなみにこの記事を書いている現在、日にちは2月2日です。
const today = new Date();
現在日時の取得はこれでできるんでしたね。ログを見てみましょう。
console.log(today);
無事、現在時刻が格納できていますね。
では
console.log(today.getTime());
としてみるとログにはなにが表示されるでしょうか??
function testDateFunction(){
const today = new Date();
console.log(today);
console.log(today.getTime());
}
なんだか謎の数字「1612194136072」が表示されましたね(;'∀')
実はこれが、「とある起点からの経過ミリ秒」の数字です。とんでもなく大きな数字のように思えますが、ミリ秒であらわされた数字なんですね~。
ではここで気になるのが、「とある起点」っていうのはいつのことよ?? ということだと思います。
ズバリ答えを言うと、それは1970年1月1日午前0時0分0秒(UTC)のことです!
これはUNIX時間といって、コンピューターで時刻を表現する際の、基準になる時刻として使われてものなんですね。
(蛇足ですが1970年1月1日午前0時を起点とするのがUNIXシリアル値で、他に1899年12月30日午前0時(VBAでは1900年1月1日午前0時)を起点とするシリアル値があったり、、、とにかくややこしい汗)
……ともかく1612194136072という数字は、1970年1月1日午前0時から数えたミリ秒という意味なのです。1970年1月1日午前0時から1612194136072ミリ秒数えた時刻がtodayだということですね。
では次にこちら↓のシートのA26セルの値をgetTime()メソッドで見てみるとどうなるでしょう?
前回の記事からちょっと時間が経ってしまったので、A26セルの日付だけ2月2日に変更しておきました(;'∀')
ちなみに日付のとなりのセルが09:00となっていますが、A26セルの時刻とはまた別ですので気にしないでください。
const cell = ss.getRange('A26').getValue();
console.log(cell);
console.log(cell.getTime());
少し違っていますね。やけにキリがいいような。。。何の違いなんでしょうか?
変数todayもcellも、同じ2021年2月2日のDateオブジェクトが格納されているはず、、、
ハッ!Σ(゚□゚;)!!
もしや日付は同じでも、何時何分何秒(&何ミリ秒)という時刻が違っているからでは……!?
では前回と同様に、変数todayの時刻ををsetHours()で午前0時に変更し、そのあとでtodayとcellを比較してみましょう!
function testDateFunction(){
const ss = SpreadsheetApp.getActiveSheet();
const cell = ss.getRange('A26').getValue();
const today = new Date(); today.setHours(0,0,0,0);
console.log(cell.getTime());
console.log(today.getTime() == cell.getTime());
}
やったー!一致したー!!
これでようやく、「2つの日にちを比較する」という段階まで到達することができました(*^_^*)
まとめると、
・日付の比較をするならDateオブジェクトの型のまま比較しない
・getTime()メソッドを使う
・〇時〇分〇秒〇ミリ秒の部分は、setHours()メソッドでそろえておく。
ということになります。
これができれば「同じ日付の行だけを抽出する」「〇月〇日~○月〇日までの日付を抽出する」といったこともできそうじゃありませんか??
ではでは、次回はシートから「A列に日付がある行だけ」を抜き出すということをやってみたいと思います!!
お読みいただきありがとうございました<(_ _)>
次回の記事はコチラ↓
出品中のサービス↓