Firebease TIMESTAMP на дату и время

Я использую firebase для своего приложения для чата. В объекте чата я добавляю отметку времени с помощью метода Firebase.ServerValue.TIMESTAMP.

Мне нужно показать полученное сообщение в приложении чата с помощью этой отметки времени.

Если текущее время мне нужно показать только время. У меня есть разница в днях. Мне нужно показать дату и время или только дату.

Я использовал следующий код для преобразования метки времени Firebase, но я не получаю фактическое время.

var timestamp = '1452488445471';
var myDate = new Date(timestamp*1000);
var formatedTime=myDate.toJSON();

Просьба предложить решение этой проблемы

Ответ 1

Firebase.ServerValue.TIMESTAMP не является фактической меткой времени, она является постоянной, которая будет заменена фактическим значением на сервере, если вы его установили в некоторые переменная.

mySessionRef.update({ startedAt: Firebase.ServerValue.TIMESTAMP });
mySessionRef.on('value', function(snapshot){ console.log(snapshot.val()) })
//{startedAt: 1452508763895}

если вы хотите получить время сервера, вы можете использовать следующий код

  fb.ref("/.info/serverTimeOffset").on('value', function(offset) {
    var offsetVal = offset.val() || 0;
    var serverTime = Date.now() + offsetVal;
  });

Ответ 2

Фактически, он работает только со мной, когда используется

firebase.database.ServerValue.TIMESTAMP

С одной "базой данных" больше в пространстве имен.

Ответ 3

Для тех, кто ищет аналог Firebase Firestore. Это

firebase.firestore.FieldValue.serverTimestamp()

например

firebase.firestore().collection("cities").add({
    createdAt: firebase.firestore.FieldValue.serverTimestamp(),
    name: "Tokyo",
    country: "Japan"
})
.then(function(docRef) {
    console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
    console.error("Error adding document: ", error);
});

Документы

Ответ 4

Решение для новых версий Firebase (после января 2016 года)

Правильный способ прикрепить отметку времени к обновлению базы данных - это добавить значение заполнителя в ваш запрос. В приведенном ниже примере Firebase заменит свойство createdAt временной меткой:

firebaseRef = firebase.database().ref();
firebaseRef.set({
  foo: "bar", 
  createdAt: firebase.database.ServerValue.TIMESTAMP
});

Согласно документации, значение firebase.database.ServerValue.TIMESTAMP является следующим: "Значение заполнителя для автоматического заполнения текущей метки времени (время с начала Unix в миллисекундах) серверами базы данных Firebase".

Ответ 5

Это просто. Используйте эту функцию для получения метки времени сервера как миллисекунды только один раз:

var getServerTime = function( cb ) {
    this.db.ref( '.info/serverTimeOffset' ).once( 'value', function( snap ) {
      var offset = snap.val();

      // Get server time by milliseconds
      cb( new Date().getTime() + offset );
    });
};

Теперь вы можете использовать его в любом месте:

getServerTime( function( now ) {
    console.log( now );
});

Зачем использовать этот способ?

Согласно последней документации Firebase, вы должны преобразовать временную метку Firebase в миллисекундах. Таким образом, вы можете использовать переменную estimatedServerTimeMs ниже:

var offsetRef = firebase.database().ref(".info/serverTimeOffset");
offsetRef.on("value", function(snap) {
  var offset = snap.val();
  var estimatedServerTimeMs = new Date().getTime() + offset;
});

Хотя firebase.database.ServerValue.TIMESTAMP намного более точен, и предпочтительнее для большинства операций чтения/записи, иногда это может быть полезно для оценки перекоса часов клиента в отношении Серверы базы данных Firebase Realtime. Вы можете подключить обратный вызов к location/.info/serverTimeOffset, чтобы получить значение в миллисекундах, что клиенты базы данных Firebase Realtime добавляют к местному отчетному времени (время в миллисекундах) для оценки времени сервера. Обратите внимание, что на эту точность смещения может влиять задержка в сети, и поэтому полезно в первую очередь для обнаружения больших ( > 1 секунд) несоответствий в часах.

https://firebase.google.com/docs/database/web/offline-capabilities

Ответ 6

Для Firestore, который является базой данных нового поколения от Google, следующий код просто поможет вам решить эту проблему.

var admin    = require("firebase-admin");

var serviceAccount = require("../admin-sdk.json"); // auto-generated file from Google firebase.

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});
var db = admin.firestore();

console.log(admin.firestore.Timestamp.now().toDate());

Ответ 7

Работа с Firebase Firestone 18.0.1 (com.google.firebase.Timestamp)

val timestamp = (document.data["timestamp"] as Timestamp).toDate()

Ответ 9

timestamp является объектом

timestamp= {nanoseconds: 0,
seconds: 1562524200}

console.log(new Date(timestamp.seconds*1000))

Ответ 10

В первую очередь Firebase.ServerValue.TIMESTAMP больше не работает для меня.

Итак, для добавления метки времени вы должны использовать Firebase.database.ServerValue.TIMESTAMP

И временная метка находится в формате long millisecond. Чтобы преобразовать миллисекунду в простой формат даты.

Exdd/MM/yy HH: mm: ss

Вы можете использовать следующий код в java:

Чтобы получить значение timestamp в строке из базы данных firebase

String x = dataSnapshot.getValue (String.class);

Теперь данные находятся в строке. Вы можете преобразовать string в long

long milliSeconds= Long.parseLong(x);

Затем создайте SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy HH:mm:ss");

Теперь преобразуйте миллисекундную временную метку в формат sdf файла

String dateAsString = sdf.format (milliSeconds);

После этого вы можете проанализировать его с помощью переменной ur Date

 date = sdf.parse (dateAsString);

Ответ 11

это работает для меня:

var timestamp   = snapshot.val().timestamp.toString().substring(0,10),
  date        = new Date(timestamp * 1000),
  datevalues  = [
                   date.getFullYear(),
                   date.getMonth()+1,
                   date.getDate(),
                   date.getHours(),
                   date.getMinutes(),
                   date.getSeconds(),
                ]; //=> [2011, 3, 25, 23, 0, 0]

Пример даты: 8/11/2017 21:46

var formatDate =  datevalues[2]+"/"+datevalues[1]+"/"+datevalues[0]+ " "+datevalues[3]+":"+datevalues[4];

console.log(FormatDate);

Привет

Ответ 12

Этот код работает для меня

<script src="https://www.gstatic.com/firebasejs/4.5.1/firebase.js"></script>
<script>
var config = {
    apiKey: "",
    authDomain: "",
    databaseURL: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: ""
};

firebase.initializeApp(config);
var reff = firebase.database().ref('message');
reff.on('value',haveData, haveerr);
function haveData(datahave){
    var existval= datahave.val();
    var chabi=Object.keys(existval);
    for(var d2=0;d2< chabi.length;d2++){
        var r=chabi[d2];
        var exitval=existval[r].Message;
        var exitval1=existval[r].Name;
        var exit=existval[r].Email;
        var exitval2=existval[r].Subject;
        var timestamp=existval[r].timestamp;
        var sdate=new Date(timestamp);
        var Year=sdate.getFullYear();
        var month=sdate.getMonth()+1;
        var day=sdate.getDate();
        var hh=sdate.getHours();
        var mm=sdate.getMinutes();
        var ss=sdate.getSeconds();
    }
}

function haveerr(e){
     console.log(e);
}
</script>

firebase database

Ответ 13

Firebase.ServerValue.TIMESTAMP совпадает с new Date().getTime().

Преобразовать его:

var timestamp = '1452488445471';
var myDate = new Date(timestamp).getTime();