Javascript 日期工作异常(将毫秒转换为秒时)

Javascript Dates working weird (when converting milliseconds to seconds )

我有未来日期和现在日期。这两个日期总是在同一天,只是时间不同。我的目标是获得未来日期和现在日期之间的秒数差异作为计时器的倒计时值。问题是当我计算时我得到的结果不准确。

在我的研究中,将毫秒转换为秒的公式是millis / 1000.0,但不是这个returns准确的倒计时结果;

我的代码

let now = (new Date().getTime() / 1000.0);
let futureDate = (new Date('2022-04-01T17:41:47.000Z').getTime() / 1000.0);

let difference;
difference = (futureDate - now); // not accurate
difference = parseInt(difference, 10); // not accurate

我希望解决方案在所有时区都能正常工作并继承本地系统时区而不是未来日期时区。

非常感谢任何帮助。

我想问问你是否知道像“0000-00-00T00:00:00.000Z”这样的日期格式总是被识别为通用时间(英国时间)。

尝试使用 +HH:MM 而不是最后一个 Z 字符。

例如,如果您在美国东部,则为“2022-04-01T17:41:47.000-05:00”。

您应该添加系统时区,如下所示:

let date = new Date('2022-04-01T17:41:47.000Z');
let now = new Date().getTime() / 1000.0;
let futureDate = (date.getTime() + date.getTimezoneOffset() * 60000) / 1000.0;

let difference;
difference = (futureDate - now); // not accurate
difference = parseInt(difference, 10); // not accurate
console.log(difference);

由于尾随“Z”,时间戳“2022-04-01T17:41:47.000Z”将被解析为偏移量 +0(也称为 UTC 或 GMT),表示 +0 偏移量。现在和那时的毫秒差是:

let diff = new Date('2022-04-01T17:41:47.000Z') - Date.now();

其中 diff 的负值表示时间戳是过去的。要将差值转换为秒,请将结果除以 1,000。

如果 运行 恰好在同一时间,则 diff 的值将相同,无论本地偏移的系统设置如何(当然允许时钟精度) .

要将时间戳解析为本地,删除 Z:

let diff = new Date('2022-04-01T17:41:47.000') - Date.now();

但是,这会将时间戳表示的瞬间偏移为本地偏移量,因此 return 每个具有不同的系统的 diff 的不同值抵消。考虑到时间戳有一个偏移量,这似乎不是一件明智的事情,因此旨在表示一个时间瞬间,而不是许多不同瞬间中的一个(与不同的偏移量一样多,如果历史偏移量可能有数百个)包括)取决于主机偏移量。