Конвертировать объект даты в метку времени Firestore - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь преобразовать объект даты в метку времени Firestore.

var dateOBJ = new Date(); 
var timeStamp = new firebase.firestore.Timestamp(dateOBJ);

Это дает мне ошибку:

Uncaught Error: Timestamp seconds out of range: Sun Dec 09 2018 11:37:05 GMT+0100

Я пытался сначала преобразовать объект даты в секундыс помощью .getTime () / 1000, но он все еще выходит за пределы диапазона.

Временной отметкой будет дата истечения срока действия URL-адреса, поэтому мне нужно добавить к ней некоторое время.

Ответы [ 3 ]

0 голосов
/ 09 декабря 2018

Существует два способа установки поля даты в Cloud Firestore:

  1. Вы указываете значение Date для поля, и в этом случае вы полностью определяете, какая дата записана.
  2. Вы указываете firebase.firestore.FieldValue.serverTimestamp(), и в этом случае сервер записывает текущую дату.

В API нет способа объединить эти два параметра, вы используете либо один, либо другой.

Поскольку вы комментируете, что хотите сохранить временную метку и смещение, я также буду хранить это поле:

  • * timestamp, которое позволяет серверу заполнятьсяfirebase.firestore.FieldValue.serverTimestamp().
  • offset поле, которое вы заполняете из приложения со смещением в днях / часах.

Таким образом, вы можете воссоздать эффективную метку времени истечения, комбинируядва поля.


Можно даже добавить третье поле, в котором хранится метка времени истечения, но для этого потребуется дополнительная операция записи.Обычно я делаю это в облачных функциях, чтобы обеспечить полный контроль над полем, а клиенты не могут его подделать.Если вы этого не сделаете в облачных функциях, рассмотрите возможность написания правил безопасности, которые подтверждают это значение, если вычисляемое поле действительно является результатом этих вычислений.

0 голосов
/ 20 февраля 2019

Фрэнк прав в отношении установки временных отметок в пожарном хранилище.

Если вы хотите проверить эту временную отметку на внешнем интерфейсе, вам необходимо использовать .toDate для объекта отметки времени, возвращенного из пожарного хранилища, чтобы превратить его вJS дата.

0 голосов
/ 09 декабря 2018

Вы не получите согласованную временную метку на стороне сервера с датой JavaScript.Вместо этого отправьте метку времени сервера из SDK:

const timestamp = firebase.firestore.FieldValue.serverTimestamp()

Если вы все еще хотите установить метку времени в качестве даты, вы можете просто передать new Date() в Firestore, и она будет сохранена как метка времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...