如何使用 Firestore 在 Cloud Functions for Firebase 中获取服务器时间戳?

How do I get the server timestamp in Cloud Functions for Firebase with Firestore?

我们如何在不使用实时数据库的情况下获取服务器时间戳 但改用 Firestore ?

import * as functions from 'firebase-functions'
import { Firestore } from '@google-cloud/firestore'

const db = new Firestore()

export let testIfMatch = functions.firestore
        .document('users/{userId}/invites/{invitedUid}')
        .onCreate(event => {
            let invite = <any>event.data.data()

            if (invite.accepted == true) {
              return db.collection('matches').add({
                friends: [userId, invitedUid],
                timestamp: doc.readTime // <--- not exactly the actual time
              })
            }

在 Firestore 中使用服务器时间戳略有不同:

// Get the `FieldValue` object
var FieldValue = require("firebase-admin").FieldValue;

// Create a document reference
var docRef = db.collection('objects').doc('some-id');

// Update the timestamp field with the value from the server
var updateTimestamp = docRef.update({
    timestamp: FieldValue.serverTimestamp()
});

如果它不起作用,您可以使用 var FieldValue = require("firebase-admin").firestore.FieldValue;

编辑 var FieldValue = require("firebase-admin").FieldValue;

这里有一个更简洁的方法:

import * as admin from "firebase-admin"

const timestamp = admin.firestore.FieldValue.serverTimestamp();

如果您使用的是 Firestore,则可以使用以下代码段。

const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore()

val ts = db.FieldValue.serverTimestamp()

这是我的做法。它不需要将 '@google-cloud/firestore' 添加为项目的依赖项,并且无需在代码中添加大量 admin.firestore.xxx

import * as admin from "firebase-admin";

import FieldValue = admin.firestore.FieldValue;
// import anything else you want to alias

someRef.set({timestamp: FieldValue.serverTimestamp()});

如果您使用的是“firebase-admin”:“10.0.0” 您可以使用以下代码段。

const {FieldValue} = require('firebase-admin/firestore');
const timestamp = FieldValue.serverTimestamp();