Как получить метку времени сервера в облачных функциях для Firebase?
Я знаю, что вы можете вытащить метку времени сервера в web, ios и android, но как насчет новых облачных функций для Firebase? Я не могу понять, как получить метку времени сервера там? Случай использования - это я хочу отметить время электронной почты, когда он прибывает.
в интернете это Firebase.база данных.ServerValue.Метка
но это, похоже,не доступно в интерфейсе сервера узлов функций?
Я думаю, что уже поздно, и я, возможно, пропустил точку здесь...
редактировать
Я инициализирую вот так
admin.initializeApp(functions.config().firebase);
const fb = admin.database()
тогда это называется так..
Firebase.database.ServerValue.TIMESTAMP
но, это от интеграции на стороне клиента. В функциях Firebase не инициализируется так. Я пытался
admin.database().ServerValue.TIMESTAMP
и
fb.ServerValue.TIMESTAMP
4 ответов
Если вы используете Firebase admin SDK, вот правильный синтаксис (проверено 2017-12-07):
const admin = require('firebase-admin');
// Using Cloud Firestore
admin.firestore.FieldValue.serverTimestamp()
// Using Realtime Database
admin.database.ServerValue.TIMESTAMP
Я новичок в узел.Яш сам, но дата.сейчас() работает в моих тестах.
редактировать
Я неправильно понял ваш вопрос-не понял, что вы хотите отметить данные, которые вы хранили в базе данных Firebase. Я думал, вы просто хотите получить время на сервере, на котором работает ваша облачная функция. Если вы хотите отметить полученное электронное письмо, хранящееся в базе данных Firebase, используя admin.database.ServerValue.TIMESTAMP
без сомнения лучший подход.
просто для моего образования, я написал следующую функцию, чтобы увидеть, как раз сравнивать. Я ожидал бы, что время на сервере облачных функций и сервере баз данных синхронизируется с очень точной ссылкой на время. Когда я запускаю эту функцию, временная метка базы данных обычно находится в пределах ста миллисекунд от Date.now()
значение. Метка времени базы данных немного позже разумна, учитывая, что для подключения к базе данных и выполнения облачной функции требуется некоторое время писать.
exports.timeTest = functions.database.ref('/test/trigger')
.onWrite(event => {
const now= Date.now();
console.log('now=', now);
const timeVals = {
dateNow : now,
serverTimestamp : admin.database.ServerValue.TIMESTAMP
};
return event.data.ref.parent.child('times').update(timeVals);
});
просто уточнить для будущих читателей:
admin.database.ServerValue.TIMESTAMP
возвращает non-null Object
и значение заполнителя для автоматического заполнения текущее время. Он не содержит фактической метки времени. База данных заменит этот заполнитель при выполнении команды.
если вы используете его внутри database.ref
затем он работает так, как вы ожидаете, и является предпочтительным способом ввода времени :
var sessionsRef = firebase.database().ref("sessions");
sessionsRef.push({
startedAt: firebase.database.ServerValue.TIMESTAMP // this will write 'startedAt: 1537806936331`
});
но если вы пытаетесь использовать его вне базы данных функция (например, чтобы вернуть время сейчас или сделать некоторые вычисления) вернет объект, который вы не можете использовать:
console.log(firebase.database.ServerValue.TIMESTAMP) // this will return an [object Object]
подробнее об этом в военнослужащих.база данных.ServerValue и и.
Date.now()
работает за пределами database
функция, если вы хотите использовать его для расчета или любого другого общего использования.
console.log(Date.now()); // this will return 1537806936331
оба они, используя unix time
какое количество секунд, которые имеют прошло с 00: 00: 00 по координированному универсальному времени (UTC), четверг, 1 января 1970 года, и это не имеет отношения к часовому поясу. Это один и тот же номер на клиенте и на сервере (...или почти:-). См.время unix .