📆
FirestoreにDateを保存するとき
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