0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【JavaScript】Dateオブジェクトを使った経過時間の取得

Last updated at Posted at 2021-12-20

はじめに

FireStoreのTimestampクラスでフィールドにDateオブジェクト渡すと取得時にTimestampクラスが返ってきますが、ここの経過時間の取得でハマった(というか勘違い)したことがあったので、サクッと振り返ります。
※個人ブログから技術的アウトプットはQiitaへ引っ越ししたので、こちらは過去に書いたブログとなります。

Dateとは

  • 簡単にいうと日時を取得。ミリ秒単位
  • ミリ秒とは? :1秒 = 1000ミリ秒

Date - JavaScript | MDN

そう、冒頭のここ。

JavaScript の日時は、基本的に協定世界時 (UTC) の1970年1月1日深夜0時からの経過ミリ秒数で指定されます。

なんで強調しているかというと、ここでハマった。

というか知らずに秒と勘違いしてた。

 publicationDate: new Date(episode.publicationDate.seconds).toISOString()

結果...

> "publicationDate": "1970-01-19T08:01:21.660Z"

と、1970年の値が返ってきて意図していない経過時間が返ってきている。

ちなみにこの数字は

publicationDate: new Date(episode.publicationDate.seconds).toISOString(),
console.log('episode.publicationDate.secondsは? : ', episode.publicationDate.seconds)

> episode.publicationDate.secondsは :  1584081660

と、 1970年1月1日深夜0時から1584081660秒(約19日分)経過した時間。

解決策

ミリ秒に変換

  • Timestampクラス
// ミリ秒に変換
Timestamp.toMillis()

firebase.google.com

もしくは求められた秒数に1000を掛けるとミリ秒数が返ってくる。

 publicationDate: new Date(episode.publicationDate.seconds * 1000).toISOString()

結果...

> "publicationDate": "2020-03-13T06:41:00.000Z"

取得したい経過時間がとれた。

その他、Timestampクラスメソッドは...

// Dateに変換
Timestamp.toDate()

など他にもある。

Timestamp | JavaScript SDK | Firebase

まとめ

  • JavaScriptのDateオブジェクトは基本的に協定世界時 (UTC) の1970年1月1日深夜0時からの経過ミリ秒数で指定。
  • FirestoreのTimestampクラスでミリ秒に変換する場合、Timestamp.toMillis()で取得可能。もしくは求められた秒数に1000を掛けるとミリ秒数を求めることができる。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?