如何通过 Angularfire 或 firebase 获取 serverTimestamp

How to get serverTimestamp via Angularfire or firebase

我找不到从 firestore 获取 serverTimestamp 的方法。要么使用 firestore 本身,要么使用 angularfire。

我发现很多 github 问题的解决方案都不起作用。我想那是因为版本不同?

"@firebase/app": "^0.1.10",
"angularfire2": "^5.0.0-rc.6.0",
"firebase": "^4.13.1",

我尝试过的替代代码:

import * as firebase from 'firebase';
firebase.firestore.FieldValue.serverTimestamp();

ERROR TypeError: Cannot read property 'FieldValue' of undefined

import * as firebase from 'firebase';
firebase.database.ServerValue.TIMESTAMP;

ERROR TypeError: Cannot read property 'ServerValue' of undefined

constructor( private afs: AngularFirestore ) { }
this.afs.firestore.FieldValue.serverTimestamp();

Property 'FieldValue' does not exist on type 'FirebaseFirestore'.

我在我的项目中使用了这个:

import { AngularFirestore } from 'angularfire2/firestore';
import { CollectionReference, Query } from '@firebase/firestore-types'; // Not usefull for your problem
import * as firebase from 'firebase';

@Injectable()
export class MyService {

  constructor(private db: AngularFirestore) {
      console.log("firebase.firestore.FieldValue.serverTimestamp()");
      console.log(firebase.firestore.FieldValue.serverTimestamp());
  }
}

在我的包裹中:

"firebase": "^4.12.1",
"angularfire2": "^5.0.0-rc.5-next"

packages.json 文件中没有这个:

"@firebase/app"

最后有帮助的是卸载所有与 firebase 相关的东西,所以正如我在问题中提到的:

"@firebase/app": "^0.1.10",
"angularfire2": "^5.0.0-rc.6.0",
"firebase": "^4.13.1",

又是运行npm install firebase angularfire2 --save

这给了我:

"angularfire2": "^5.0.0-rc.7",
"firebase": "^5.0.1",

这解决了我所有的问题。

将 Firebase 导入为:

import * as firebase from 'firebase';

时间戳代码本身:

get timestamp() {
  return firebase.firestore.FieldValue.serverTimestamp();
}

11 月 17 日编辑: 如果您将使用前面提到的导入 import * as firebase from 'firebase';,您将在开发人员控制台中收到此警告:

It looks like you're using the development build of the Firebase JS SDK. When deploying Firebase apps to production, it is advisable to only import the individual SDK components you intend to use.

For the module builds, these are available in the following manner (replace with the name of a component - i.e. auth, database, etc):

CommonJS Modules: const firebase = require('firebase/app'); require('firebase/');

ES Modules: import firebase from 'firebase/app'; import 'firebase/';

Typescript: import * as firebase from 'firebase/app'; import 'firebase/';

所以改成:

import * as firebase from 'firebase/app';
import 'firebase/firestore';

正在做:

import * as firebase from 'firebase';

导入所有 firebase 模块,这不是生产的好习惯。 最佳做法是像这样使用裸导入:

import * as firebase from 'firebase/app'; 
import 'firebase/firestore';

这只会在您的应用中导入 Firestore 模块。然后你可以这样做:

get timestamp() {
return firebase.firestore.FieldValue.serverTimestamp();
};

我解决了这种形式:

进口: import { AngularFirestore } from '@angular/fire/firestore';

代码:

constructor(private db: AngularFirestore) {}

private getTimestamp(): Object {
    return this.db.firestore['_firebaseApp'].firebase_.firestore.FieldValue.serverTimestamp();
}

依赖关系:

  "@angular/fire": "^5.3.0",
  "firebase": "^7.7.0",

Checkout this one

  1. 导入 firestore ## 从 'firebase/app' 导入 { firestore };
  2. 获取服务器时间戳## createdAt = firestore.FieldValue.serverTimestamp();

Angular Firestore - serverTimestamp

从 firebase 8.0.0 开始,在如何导入 firebase 方面发生了重大变化 Release Notes

在您使用

导入之前
import * as firebase from 'firebase/app'

但是现在,您应该使用

导入
import firebase from 'firebase/app'

您仍然应该只导入 firestore 以访问服务器时间戳

import firebase from 'firebase/app'
import 'firebase/firestore'

并在您的应用中使用

firebase.firestore.FieldValue.serverTimestamp()
  1. 从 'firebase/compat/app';
  2. 导入 * 作为 Firebase

......

......

  1. 然后试试这些
  • 时间戳=firebase.default.firestore.FieldValue.serverTimeStamp()

  • 时间戳=firebase.firestore.FieldValue.serverTimeStamp()