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()
Ответ 8
Функции Firebase преобразуют временную метку следующим образом:
timestampObj.toDate()
timestampObj.toMillis().toString()
Документация здесь https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp
Ответ 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();