📆

FirestoreにDateを保存するとき

2021/10/06に公開

Firestoreへ日付を保存するときは,Dateクラスを保存するか,Firebaseのtimestampを使用するか,日付をStringにしてから保存するか悩むがそのへんの話.

まず,JavaScriptのDateの仕様が非常にややこしく難しい.

なので,アプリ内で表示目的であり,かつ変更が頻繁でないものに関しては,保存する前に2020/02/02 20:20:20のようなStringにして保存することにしてます.

しかし,アプリ内では,日付を計算させてから表示するものに関しては,Stringではなく,Firebaseのtimestampを使用して保存しています.

db.collection('hoge').add({ sendAt: new Date() })

new Date()のようにしてDateクラスを保存してみたのですが,保存したデータを取得すると結局Firebaseのtimestampを同じ型になっていてたんですよね.だから,最初から以下のようにFirebaseのtimestampを使って保存しておきます.

db.collection('hoge').add({ sendAt: firebase.firestore.FieldValue.serverTimestamp() })

補足ですが,以上の記述はv9から短く書けるようになりました.

import { updateDoc, serverTimestamp } from "firebase/firestore";

const docRef = doc(db, 'objects', 'some-id');

// Update the timestamp field with the value from the server
const updateTimestamp = await updateDoc(docRef, {
    timestamp: serverTimestamp()
});

公式ドキュメント引用
https://cloud.google.com/firestore/docs/manage-data/add-data#server_timestamp

まとめると,

  • アプリ内で表示目的であり,かつ変更が頻繁でないものに関してはStringで保存
  • アプリ内では,日付を計算させてから表示するものに関してはFirebaseのtimestampを使用して保存

するといいと思います.

Discussion