Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass a JS date object to cloud function for storing it on Firestore

When I write a Date object to my Firestore, all works correctly and I can see a date in the DB stored with the type "timestamp". If I try to pass a Date object to a cloud function, I don't know why but it is an empty object when I store it from the cloud function to the firestore DB.

  firebase.functions().httpsCallable("myFunction")({date: new Date()}) <---- // this doesn't work

So, I have decided to convert the Date object to a firestore timestamp in the client side before sending it to the cloud function. As follows:

  date = firebase.firestore.Timestamp.fromDate(date);
  firebase.functions().httpsCallable("myFunction")({date})

Then, if I get it in the cloud function and store it on my firestore, I see an object with the fields "seconds" and "nanoseconds", but not a timestamp (I mean it is not stored with the type Timestamp)... So when I get this date I cannot apply the method .toDate()

Is there any good way to store the date in this situation as a timestamp and not as an object?

like image 754
Raul Avatar asked Oct 19 '25 22:10

Raul


1 Answers

The input and output of callable functions deal entirely with JSON, so they are limited to expressing only those types that are allowed in JSON: string, number, boolean, null, object, array. Date and Timestamp are not among those types. What the Firebase SDK will do is try to serialize custom objects as JSON, which is not working the way you want - the seconds and nanos fields of the Timestamp are being split up during serialization.

If you have a Date to send from the client, you should just send it as a number. Instead of passing a Date object, pass the single number inside it (milliseconds since unix epoch):

const number = date.getTime()

On the receiving side, in Cloud Functions, take the number and convert it back to a Date:

const date = new Date(number)

Then you can write the Date object to a Firestore document field.

like image 98
Doug Stevenson Avatar answered Oct 21 '25 12:10

Doug Stevenson



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!