截至日期和时间

我使用我的聊天应用程序的火库。在聊天对象我添加时间戳使用 Firebase.ServerValue.TIMESTAMP方法。

我需要在聊天应用程序中使用这个时间戳显示消息接收时间。

如果是当前时间,我只需要显示时间。它的天差我需要显示日期和时间或只日期。

我使用以下代码转换的 Firebase 时间戳,但我没有得到实际的时间。

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

请提出解决这个问题的办法

206122 次浏览

火力点。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;
});

Firebase.ServerValue.TIMESTAMPnew Date().getTime()相同。

转换:

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

事实上,它只在我使用的时候起作用

firebase.database.ServerValue.TIMESTAMP

在名称空间上多了一个“数据库”。

新版本 Firebase 的解决方案(2016年1月之后)

将时间戳附加到数据库更新的正确方法是在请求中附加占位符值。在下面的例子中,Firebase 将用时间戳替换 createdAt属性:

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

根据 文件,值 firebase.database.ServerValue.TIMESTAMP是: “一个占位符值,用于通过 Firebase 数据库服务器自动填充当前时间戳(Unix 时代以来的时间,以毫秒为单位)。”

首先 Firebase.ServerValue.TIMESTAMP已经不适合我了。

因此,为了添加时间戳,必须使用 Firebase.database.ServerValue.TIMESTAMP

时间戳的格式为长的毫秒格式。将毫秒格式转换为简单的日期格式。

前 dd/MM/广州欢聚时代 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");

现在将毫秒时间戳转换为 sdf 格式

String dateAsString = sdf.format (milliSeconds);

然后你可以把它解析成你的 Date变量

 date = sdf.parse (dateAsString);

这很简单。使用该函数获取服务器时间戳为毫秒的 只有一次:

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 更加精确, 并且对于大多数读/写操作来说,它可能偶尔是 有助于估计客户端的时钟偏差 实时数据库的服务器。您可以将回调附加到 Location/. info/serverTimeOffset 获取值,以毫秒为单位, Firebase 实时数据库客户端添加到本地报告时间 (以毫秒为单位的纪元时间)来估计服务器时间 这个偏移量的准确性可能会受到网络延迟的影响,等等 主要用于发现大于1秒的差异 在时钟的时间。

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

对于那些寻找 Firebase 火焰恢复等价物的人来说

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);
});

医生

这个代码是我的工作

<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

使用 Firebase Firestone 18.0.1 (com.google.firebase. Timestamp)

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

对于来自 Google 的新一代数据库 Firestrate9,下面的代码将简单地帮助您解决这个问题。

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());

内部 Firebase 函数如下转换时间戳:

timestampObj.toDate()
timestampObj.toMillis().toString()

(只提供英文版本)

Timestamp是一个对象:

timestamp = {
nanoseconds: 0,
seconds: 1562524200
}


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

var date = new Date((1578316263249));//data[k].timestamp
console.log(date);

下面是一个安全的方法,可以将一个值从 firebase Timestamp 类型转换为 JS Date 如果该值不是 Timestamp,则该方法返回原来的值

为 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;
}

迭代这段代码正是我用过的精确代码。

querySnapshot.docs.forEach((e) => {
var readableDate = e.data().date.toDate();
console.log(readableDate);
}


我转换成了这种格式

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)

new Date(timestamp.toDate()).toUTCString()

试试这个,

var timestamp = firebase.firestore.FieldValue.serverTimestamp()
var timestamp2 = new Date(timestamp.toDate()).toUTCString()
    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)

我知道基地给出了 {seconds: '', and nanoseconds: ''}的时间戳 转换为日期,你只需要做:

  • 使用一个 var ex:-const 日期计算火源时间

然后返回日期。

对我来说,如果 timeStamp 是一个整数而不是字符串,那么它就可以工作:

var timestamp = '1452488445471';
var myDate = new Date(parseInt(timestamp));
myDate.toDateString()
let jsDate = new Date(date.seconds * 1000 + date.nanoseconds / 1000000);