Как сохранить дату в Firestore со стороны клиента без импорта firebase-администратора?

# #javascript #firebase #datetime #google-cloud-firestore

Вопрос:

Я хочу использовать что-то вроде serverTimestamp метода на стороне клиента, но для этого мне нужно включить пакет firebase-admin, который увеличит размер пакета клиента.

 import * as firebaseAdmin from "firebase-admin";
if (!firebaseAdmin.apps.length) {
  firebaseAdmin.initializeApp();
}

const firebaseTimestamp = firebaseAdmin.firestore.FieldValue.serverTimestamp();

const initDate = firebaseAdmin.firestore.Timestamp.fromDate(
    new Date(Date.UTC(0, 0, 0, 0, 0, 0))
  );
 

Существует ли какое-либо облегченное решение для доступа к методам временных меток firebase со стороны клиента?

Я не уверен, смогу ли я отказаться servertimestamp и пойти new Date() , так как это связано с текущим часовым поясом. Я хочу хранить время в Firestore (со стороны клиента), которое не относится ни к какому часовому поясу, и позже я смогу запросить firestore на основе этого параметра даты.

ссылка: https://firebase.google.com/docs/reference/node/firebase.firestore.Отметка времени

Комментарии:

1. Вы могли бы использовать Date.now() , который всегда возвращает количество миллисекунд, прошедших с 1970-бла-бла UTC

2. Если я сохраню его как отметку времени, то как мне выполнить запрос на основе форматов дат, таких как выборка строк между датами A и B?

Ответ №1:

Вы не должны импортировать пакет SDK администратора Firebase на стороне клиента. Для запуска требуется учетная запись службы, у нее есть права администратора, т. е. она не подчиняется никаким правилам безопасности и имеет полный доступ к вашему проекту Firebase.

Вы также можете добавить метку времени с помощью клиентского SDK:

 firebase.firestore.FieldValue.serverTimestamp()
 

Вы можете прочитать больше об этом в документации

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

Это количество секунд, прошедших с эпохи Unix, за вычетом високосных секунд; эпоха Unix составляет 00:00:00 UTC 1 января 1970 года;

 const timestamp = Date.now()
 

Затем вы можете использовать объект даты JS для его форматирования в любом формате.

Комментарии:

1. Затем вы можете использовать объект даты JS для форматирования его в любом формате. > Как я могу сохранить объект даты UTC в Firestore?

2. Кроме того, Date.now возвращает миллисекунды, а не секунды

3. @GorvGoyl new Date(Date.now()).toUTCString() , чтобы получить строку времени UTC. Кроме того, вы можете просто сохранить числовую метку времени в базе данных, чтобы упростить запрос. Вы можете отформатировать его с помощью объекта Даты в любом другом месте.