How to save date in Angular as a timestamp to Firestore?

偶尔善良 提交于 2019-12-20 04:58:08

问题


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


回答1:


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.




回答2:


I save my data to firestore and use new Date(). The date is currently added as a timestamp to firestore.

But you can use moment.js in your app to handle the string. moment('my date in a string format') will be converted as you like.




回答3:


Since my date was converted into string at some point, I converted it back to Date object just before it is being saved to the database.

let myDate = new Date();
// myDate is converted to string at some point.

Just before I save it to firebase, I needed to convert it again to Date object.

// need to parse from String to Date
let myDateTemp = new Date(myDate);
record = {
    myDate: myDateTemp
}
return this.firestore.collection('myCollection').add(record);


来源:https://stackoverflow.com/questions/53336061/how-to-save-date-in-angular-as-a-timestamp-to-firestore

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!