获取 UTC 中两个不同日期字符串之间的时差(小时、秒、分钟)
Get time difference (hours, seconds, minutes) between two different date strings in UTC
我需要跟踪用户执行某项任务的时间。因此,我想获得用户登录时间与当前时间之间的确切时差。用户登录时间来自数据库
*值得注意的是我需要在 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);
毫无疑问,分钟和秒数需要增加,但出于某种原因,它们对我来说一直在减少(并且转向 date.now() 和周围的其他变量不是解决方案)!我将附上一张我的控制台日志的图片(这样你就可以看到数字是如何下降的,即使经过更多的时间它们应该会上升):
我显然遗漏了什么,但我看不到什么。我想可能是 Date.now() 给了我当地时间的毫秒数,而我需要 UTC 时间的毫秒数(如果是这种情况,我仍然找不到如何去做)。
问题是您数据库中的数据不是正确的 UTC 格式,因此该值被解释为当地时间 -- 这就是您看到负值的原因。
When the time zone offset is absent, date-only forms are interpreted
as a UTC time and date-time forms are interpreted as local time.
所以你的值 2020-05-12 18:04:25
最终可能是未来的时间,这取决于你所在的位置。
您需要 return 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());
我需要跟踪用户执行某项任务的时间。因此,我想获得用户登录时间与当前时间之间的确切时差。用户登录时间来自数据库
*值得注意的是我需要在 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);
毫无疑问,分钟和秒数需要增加,但出于某种原因,它们对我来说一直在减少(并且转向 date.now() 和周围的其他变量不是解决方案)!我将附上一张我的控制台日志的图片(这样你就可以看到数字是如何下降的,即使经过更多的时间它们应该会上升):
我显然遗漏了什么,但我看不到什么。我想可能是 Date.now() 给了我当地时间的毫秒数,而我需要 UTC 时间的毫秒数(如果是这种情况,我仍然找不到如何去做)。
问题是您数据库中的数据不是正确的 UTC 格式,因此该值被解释为当地时间 -- 这就是您看到负值的原因。
When the time zone offset is absent, date-only forms are interpreted as a UTC time and date-time forms are interpreted as local time.
所以你的值 2020-05-12 18:04:25
最终可能是未来的时间,这取决于你所在的位置。
您需要 return 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());