我为此而失去睡眠,因此非常欢迎您提供任何帮助!
我需要跟踪用户执行任务的时间。因此,我想获得用户登录时间与当前时间之间的确切时差。用户登录的时间来自数据库。
*值得注意的是,我需要在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()和周围的其他变量不是解决方案!)!我将附上控制台日志的图片(这样您就可以看到数字是如何下降的,即使经过了更多时间也应该上升):
我显然缺少一些东西,但我看不到。我认为可能是Date.now()给了我本地时间的毫秒数,而我需要使用UTC(如果是这种情况,我仍然找不到方法)。
非常感谢您的帮助!Nahuel
问题是您数据库中的数据格式不正确,因此该值被解释为本地时间-这就是为什么您看到负值的原因。
缺少时区偏移时,仅日期格式将被解释因为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());