如何将ion-datetime发送到firebase作为时间戳?

时间:2019-02-28 15:16:51

标签: angular forms firebase ionic-framework reactive

我正在使用ionic 4和firebase进行项目,除日期外,一切都进行得很好。我开始在控制台中看到警告,提示Date()将来会中断,并且Firebase应该使用时间戳来存储日期时间。

对于诸如在时间创建或修改的事情,我可以使用:

createdAt: firebase.firestore.FieldValue.serverTimestamp()

,它将成功将当前日期/时间作为时间戳存储到firebase中。

但是,尝试传递特定的日期/时间作为时间戳似乎不起作用。我有一个反应形式,它是一个离子日期选择器。 HTML是

<ion-item>
<ion-label>Date/Time:</ion-label>
    <ion-datetime formControlName="date" displayFormat="YYYY MMM DD @ HH:mm"></ion-datetime>
</ion-item>

,然后键入脚本将使用所有控件名称和验证器创建的反应形式。提交表单后,我会调用一个异步函数,该函数会将所有内容发送到firebase。

  async create() {
const id = this.game ? this.game.id : '';
const data = {
  createdAt: firebase.firestore.FieldValue.serverTimestamp(),
  ...this.game,
  ...this.gameForm.value,
};
this.db.updateAt(`games/${id}`, data);
this.modal.dismiss();

}

但是,离子日期选择器中的日期作为地图而不是时间戳发送。它具有年/月/小时/等。对象,而不是单个时间戳。

enter image description here

离子文档显示日期选择器为ISO格式。任何人都知道为什么会发生这种情况,或者我如何将其转换为时间戳?

1 个答案:

答案 0 :(得分:0)

我知道了。使用JS Date()时,firestore在存储时应自动转换为时间戳。我刚刚从表单中获取了值,并将其调整为传播语法之后的日期。

async create() {
const id = this.game ? this.game.id : '';
const data = {
  createdAt: firebase.firestore.FieldValue.serverTimestamp(),
  ...this.game,
  ...this.gameForm.value,
  date: new Date(this.gameForm.value.date)

};
this.db.updateAt(`games/${id}`, data);
this.modal.dismiss();

}