最近Firebaseを使って簡単なウェブアプリを作るのにチャレンジしたのですが、Firestoreのtimestamp型に癖があって苦労しました。
特に困ったのがdateフォームからのデータを入力するときで、そのまま値を入れたらstring型と判断されて「あれ?」となりました。色々と調べてみたら解決したので、以下にまとめておきます。
ちなみにこちらの記事はFirestore v9のお作法で書いていますが、v8で書いている方は逐次v8バージョンにリライトをお願いします。
Timestamp.fromDate()で変換する
※ここでは↓にあるいつものFirebase、Firestoreの初期化は終わっている前提で進めます。
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";
例えば誕生日(birthday)をフォームから受け取ってFirestoreに保存する場合は
<input type="date" name="birthday" value="">
firestoreからTimestampをインポートして…
import { Timestamp } from "firebase/firestore";
受け取った値を変数birthdayに格納したとしたら、以下の書き方でtimestamp型へ変換することができます。
Timestamp.fromDate(new Date(birthday))
色んな方法を試しては「なんでstring型で保存されてしまうんだー!」と叫んでいましたが、答えは意外とシンプルでした。公式のドキュメントを読んでおけば終わりだったという。
https://firebase.google.com/docs/reference/node/firebase.firestore.Timestamp
この記事の趣旨とは関係ないんですがFirebase本当に便利ですね。FirestoreがNoSQLなので集計周りが弱いのが難点だなと思っていたのですがBigQuery使えばなんとかなりますし、セキュリティ周りの実装もシンプルでわかりやすいのでさっとアプリを作りたいときは重宝します。