JavaScriptでタイムスタンプを変換して前日の日付と比較する

javascript-diff-date
  • URLをコピーしました!

例えば、よくファイルの作成日や更新日にタイムスタンプを用いることがありますが、ただの数字の羅列のままでは日付比較できないので、JavaScript日付形式に変換し、前日の日付と比較して一致するか判定する方法をご紹介します。

目次

タイムスタンプとは?

予備知識として、タイムスタンプについてちょいと解説。
タイムスタンプを簡単に言うと、[1970年1月1日00:00:00(UTC)]から経過秒数のことです。

UNIX時間協定世界時 (UTC)日本標準時 (JST)
01970-01-01T00:00:001970-01-01T09:00:00
1000000001973-03-03T09:46:401973-03-03T18:46:40
10000000002001-09-09T01:46:402001-09-09T10:46:40
12345678902009-02-13T23:31:302009-02-14T08:31:30
21474836472038-01-19T03:14:072038-01-19T12:14:07
引用:UNIX時間 – Wikipedia

今現在の日付タイムスタンプ変換すると、10桁(または13桁)の数字で表します。
この10桁の数字をJavaScript日付形式に変換して比較していきます。

タイムスタンプと前日の日付を比較

ここでは、最終的にタイムスタンプと前日の日付が一致するかを判定する関数を作ります。
以下のようなJavaScriptの関数を用意し、引数[value]にはタイムスタンプを渡します。

タイムスタンプを日付に変換

タイムスタンプから日付への変換は、JavaScriptでお馴染みのDate()オブジェクトで既に用意されており、簡単に変換できると思っていましたが、これが少し曲者でした。
試しに、上記の表にあった10桁の数字(1234567890)を突っ込んで見たのですが、思ったような結果が返ってこない。。

本来なら、出力結果の日付は上記のように[2009年2月13日]と表示されるはずだが、実際出力されたのはコレでした。。

管理者
管理者

1970年!?
あまりにも差があるぞ!
桁が足りないのかな…?

ミリ秒を忘れるなかれ

そーなんです!
上記でも少し触れましたが、JavaScriptDate()オブジェクトではタイムスタンプミリ秒まで含めて計算するのです。
つまり、秒数の10桁にはミリ秒の3桁が含まれていないので、合計13桁の数字が必要になります。
では、どうするか。ミリ秒はどうでもいいので、単純に1,000を掛けるだけでいいじゃん!
ということで、もし10桁タイムスタンプを使用する場合はこのようにしましょう。

これで想定通りの結果が返ってきました!

これでタイムスタンプ側の日付が取得できました!

前日の日付を取得する

次は比較する側、つまり、前日の日付を取得します。
こちらは特に説明が必要ないくらい簡単で、単純に現在の日付から1日を引くだけで良いです。

このDate()オブジェクトについては、前日以外にも先月や昨年、明日や来月などの取得もできるので、様々なシーンで使えると思います。

日付のフォーマットを合わせる

両方の日付を比較しやすいように、[YYYYMMDD]形式にフォーマットしてあげます。
先程、Date()オブジェクトで取得したタイムスタンプと前日の日付を同じ形式にフォーマットします。
ここで重要な点が2つあります。

  • 月と日を2桁に揃える
    slice()メソッドを使用して、月と日を2桁のゼロパディングする。
  • 月は0から始まる
    getMonth()メソッドは1月が[0]~12月を[11]と返すので注意!

上記のポイントを踏まえてコードを書くと、以下のようになります。

後は、この2つの日付が一致するか比較したら完成です。

関数の完成

完成した関数では、タイムスタンプと前日の日付を比較し、一致したら[1]、一致しなければ[0]を返します。
既に桁数は合わせてますので、比較文字列でも数値でもif文判定できます。

以上!お疲れ様でした。
所々覚えておきたいポイントがありましたので、忘れないようにしましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次