获取UTC中两个不同日期字符串之间的时差(小时,秒,分钟)

问题描述 投票:0回答:1

我为此而失去睡眠,因此非常欢迎您提供任何帮助!

我需要跟踪用户执行任务的时间。因此,我想获得用户登录时间与当前时间之间的确切时差。用户登录的时间来自数据库。

*值得注意的是,我需要在UTC工作。

来自数据库,它是这样的,它已经存在于UTC中:2020-05-12 18:04:25

这就是我试图或多或少要做的事情:

let timer = Math.abs(Date.now() - new Date(timeFromDataBase).getTime());

let minutes = Math.floor(timer / 60000);
let seconds = ((timer % 60000) / 1000).toFixed(0);

毫无疑问,由于某种原因,它们需要增加BUT的分钟和秒数会不断减少(并且转动date.now()和周围的其他变量不是解决方案!)!我将附上控制台日志的图片(这样您就可以看到数字是如何下降的,即使经过了更多时间也应该上升):

enter image description here

我显然缺少一些东西,但我看不到。我认为可能是Date.now()给了我本地时间的毫秒数,而我需要使用UTC(如果是这种情况,我仍然找不到方法)。

非常感谢您的帮助!Nahuel

javascript date time timezone utc
1个回答
0
投票

问题是您数据库中的数据格式不正确,因此该值被解释为本地时间-这就是为什么您看到负值的原因。

缺少时区偏移时,仅日期格式将被解释因为UTC时间和日期时间格式被解释为本地时间。

所以您的2020-05-12 18:04:25值最终可能会变成将来的时间,具体取决于您所在的位置。

您需要返回UTC格式的字符串,包括来自数据库的偏移量信息-(Z或+ hh:mm或-hh:mm),或在客户端上重建该字符串。

演示:

const dbDate = new Date('2020-05-12 18:04:25');
console.info(dbDate.toUTCString()); // future for me in US
console.info(Date.now() - dbDate.getTime()); // negative value for me in US

const utcDate = new Date('2020-05-12T18:04:25.000+00:00');
console.info(utcDate.toUTCString());
console.info(Date.now() - utcDate.getTime());

const utcDateZ = new Date('2020-05-12T18:04:25.000z');
console.info(utcDateZ.toUTCString());
console.info(Date.now() - utcDateZ.getTime());
© www.soinside.com 2019 - 2024. All rights reserved.