new Date()和firestore new Date(()数据之间的差异



对于一个新的应用程序,我想知道运行开始和结束之间的时间。

开始时,我在Firebase中使用新的Date((函数保存时间戳。(我使用的是这个功能,而不是firestore fieldValue,因为邮票无法与其他用户同时制作邮票。

在明确结束跑步之前,我想概述一下开始和结束之间的时间差异。

我从firebase中获取开始值,并使用新的Date((函数创建一个临时结束值。

当我把这两个值放在一起时,firestore似乎会在写入数据库时更改值。

当我也在firebase中编写endStamp并使用该值进行计算时,一切都很好。

这是我现在的代码:

calculateTimeBetweenStamps(run) {
const startTime = run.startTimestamp;
const endTime = new Date();
return calculateTimeBetweenStamps({
startTime: startTime,
endTime: endTime
});
}

包含以下功能的Js文件:

export function calculateTimeBetweenStamps(e) {
const startTime = e.startTime;
const endTime = e.endTime;
var difference = endTime - startTime;
var sec_num = parseInt(difference, 10);
var hours = Math.floor(sec_num / 3600);
var minutes = Math.floor((sec_num - hours * 3600) / 60);
var seconds = sec_num - hours * 3600 - minutes * 60;
if (hours < 10) {
hours = "0" + hours;
}
if (minutes < 10) {
minutes = "0" + minutes;
}
if (seconds < 10) {
seconds = "0" + seconds;
}
return `${hours}:${minutes}:${seconds}`;
}

Firestore使用JavaScript Date对象,与您的代码相同,但正如您在文档中看到的那样,它有一个限制:

存储在Cloud Firestore中时,精确到微秒;任何额外的精度都会向下取整。

这可能是您所经历的日期的差异。如果你需要这种级别的粒度,你可以在Firestore中只使用时间戳,因为你可以在它的文档中看到:

表示独立于任何时区或日历的时间点,以UTC Epoch时间的纳秒分辨率表示为秒和秒的分数。

然后要在代码中操作它,您可以使用它的.toDate()函数将其转换为日期,该函数将再次向您返回一个JavaScriptDate对象,但精度不会四舍五入。

最新更新