I am trying to save personal info of person with birth date and activation date into Firestore database in Angular;
However, passing object with Date()
type fields the dates are saved as a string:
this.treatment.activationDate = new Date();
// gives such result in firestore with string type
// activationDate: "2018-11-16T09:48:51.137Z"
Also tried to use server timestamp, but the following method does not return valid value:
firebase.firestore.FieldValue.serverTimestamp()
Result in Firestore (not allowed to upload images sorry :) ):
activationDate: (map)
_methodName: FieldValue.serverTimestamp
However, this method can not provide me a timestamp for custom dates (birthDate for example) So what is the best way to save date as a timestamp object in firestore using angular?
.....
import * as firebase from 'firebase';
.....
export class AddPatientComponent implements OnInit {
......
this.treatment.activationDate = new Date();
//firebase.firestore.FieldValue.serverTimestamp();
console.log("timestamp: ", this.treatment.activationDate, firebase.firestore.FieldValue.serverTimestamp());
this.patientService.savePatient(this.patient, this.treatment, this.courseMeds);
And a model:
export class CourseMed{
amountPerDay: number;
atc: String;
name: String;
days: number;
dosage: number;
form: String;
method: String;
periodicity: number;
takeTimes: string[];
used: number;
takenCount: {};
angular 6 Node: 8 rxjs 6.3.3 typescript 2.9.2
To convert a Firestore date or timestamp to a JavaScript Date, we use firebase. firestore. Timestamp. fromDate to convert the a date to a Firestore timestamp.
firestore. Timestamp. A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one.
Date and time - Chronological - When stored in Cloud Firestore, precise only to microseconds; any additional precision is rounded down.
If you want in your Cloud Firestore database the date value of:
firebase.firestore.FieldValue.serverTimestamp()
You should use a call to .toDate() function. Please checkout FireStore Timestamp from the official documentation for more information. In your particular case, you should use the following call:
treatment.activationDate.toDate()
This change was added in Firebase JS SDK v4.13.0
, where JavaScript Date
objects should be saved of type Timestamp
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With