我在聊天应用程序中使用firebase。在聊天对象中,我使用Firebase.ServerValue.TIMESTAMP
方法添加时间戳。
我需要使用此时间戳在聊天应用程序中显示收到的消息时间。
如果是当前时间我只需要显示时间。我需要显示日期和时间或仅显示日期。
我使用以下代码转换Firebase时间戳,但我没有得到实际时间。
var timestamp = '1452488445471';
var myDate = new Date(timestamp*1000);
var formatedTime=myDate.toJSON();
请为此问题建议解决方案
答案 0 :(得分:28)
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;
});
答案 1 :(得分:19)
事实上,它只对我有用
firebase.database.ServerValue.TIMESTAMP
使用一个数据库'更多关于命名空间。
答案 2 :(得分:7)
对于那些寻找Firebase Firestore等效的人。这是
firebase.firestore.FieldValue.serverTimestamp()
e.g。
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);
});
答案 3 :(得分:5)
将时间戳附加到数据库更新的正确方法是在请求中附加占位符值。在下面的示例中,Firebase会将createdAt
属性替换为时间戳:
firebaseRef = firebase.database().ref();
firebaseRef.set({
foo: "bar",
createdAt: firebase.database.ServerValue.TIMESTAMP
});
根据documentation,值firebase.database.ServerValue.TIMESTAMP
为:"一个占位符值,用于自动填充Firebase数据库服务器的当前时间戳(自Unix纪元以来的时间,以毫秒为单位) "
答案 4 :(得分:4)
我知道 Firebase 在 {seconds: '', and nanoseconds: ''}
中给出时间戳
要转换为日期,您只需要做:
然后 date.toDate()
=> 它返回日期。
答案 5 :(得分:3)
很简单。使用该函数将服务器时间戳设置为毫秒仅一次:
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实时数据库的服务器。你可以附加一个回调 location /.info/serverTimeOffset获取值,以毫秒为单位, Firebase实时数据库客户端添加到本地报告的时间 (以毫秒为单位的纪元时间)来估计服务器时间。注意 这种偏移的准确性会受到网络延迟等因素的影响 主要用于发现大的(> 1秒)差异 在时钟时间。
https://firebase.google.com/docs/database/web/offline-capabilities
答案 6 :(得分:2)
对于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 :(得分:2)
这是将值从Firebase Timestamp类型转换为JS日期的安全方法 如果该值不是时间戳,则该方法按原样返回
适用于Angular 7/8/9
import firebase from 'firebase';
import Timestamp = firebase.firestore.Timestamp;
export function convertTimestampToDate(timestamp: Timestamp | any): Date | any {
return timestamp instanceof Timestamp
? new Timestamp(timestamp.seconds, timestamp.nanoseconds).toDate()
: timestamp;
}
答案 8 :(得分:2)
Firebase内部函数可以像这样转换时间戳:
timestampObj.toDate()
timestampObj.toMillis().toString()
文档https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp
答案 9 :(得分:1)
使用Firebase Firestone 18.0.1 (com.google.firebase.Timestamp)
val timestamp = (document.data["timestamp"] as Timestamp).toDate()
答案 10 :(得分:0)
时间戳是一个对象
timestamp= {nanoseconds: 0,
seconds: 1562524200}
console.log(new Date(timestamp.seconds*1000))
答案 11 :(得分:0)
遍历这是对我有用的精确代码。
querySnapshot.docs.forEach((e) => {
var readableDate = e.data().date.toDate();
console.log(readableDate);
}
答案 12 :(得分:0)
我转换为这种格式
let timestamp = '1452488445471';
let newDate = new Date(timestamp * 1000)
let Hours = newDate.getHours()
let Minutes = newDate.getMinutes()
const HourComplete = Hours + ':' + Minutes
let formatedTime = HourComplete
console.log(formatedTime)
答案 13 :(得分:0)
new Date(timestamp.toDate()).toUTCString()
答案 14 :(得分:0)
尝试一下,
var timestamp = firebase.firestore.FieldValue.serverTimestamp()
var timestamp2 = new Date(timestamp.toDate()).toUTCString()
答案 15 :(得分:0)
import firebaseAPP from 'firebase/app';
public Date2firestoreTime(fromDate: Date) {
return firebaseAPP.firestore.Timestamp.fromDate(fromDate).toMillis()
}
public firestoreTime2Date(millisecDate: number) {
return firebaseAPP.firestore.Timestamp.fromMillis(millisecDate).toDate()
}
//usage:
let FSdatenow = this.Date2firestoreTime(new Date())
console.log('now to firestore TimeStamp', FSdatenow)
let JSdatenow = this.firestoreTime2Date(FSdatenow)
console.log('firestore TimeStamp to Date Obj', JSdatenow)
答案 16 :(得分:-1)
此代码适用于我
<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>
答案 17 :(得分:-1)
这对我有用:
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);
此致
答案 18 :(得分:-1)
First Of All Firebase.ServerValue.TIMESTAMP
对我不起作用了。
因此,要添加时间戳,您必须使用Firebase.database.ServerValue.TIMESTAMP
时间戳采用长毫秒格式。将毫秒转换为简单的日期格式。
显示/ MM / yy HH:mm:ss
您可以在java中使用以下代码:
从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");
现在将您的毫秒时间戳转换为ur sdf格式
String dateAsString = sdf.format (milliSeconds);
之后,您可以将其解析为Date
变量
date = sdf.parse (dateAsString);
答案 19 :(得分:-7)
Firebase.ServerValue.TIMESTAMP
与new Date().getTime()
相同。
转换它:
var timestamp = '1452488445471';
var myDate = new Date(timestamp).getTime();