我有未来日期和现在日期。这两个日期总是在同一天,但时间不同。我的目标是获得未来日期和现在日期之间的秒差,作为计时器的倒计时值。问题是,当我计算时,得到的结果不准确。
在我的研究中,将毫秒转换为秒的公式是millis / 1000.0
,但这并没有返回准确的倒计时结果;
我的代码
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
我希望该解决方案在所有时区上正常工作,并继承本地系统时区而不是未来的日期时区。
任何帮助都将不胜感激。
您应该添加系统时区,如下所示:
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);
我想检查一下你是否知道像"0000-00-00T00:00:00.000Z";总是被公认为世界时(英国时间(。
请尝试使用+HH:MM而不是最后一个Z字符。
例如,如果你在美国东部;2022-04-01T17:41:47.000-05:00";。
时间戳"2022-04-01T17:41:47.000Z"将被解析为偏移量+0(又名UTC或GMT(,因为后面的";Z";,表示+0偏移。现在和当时的差异(以毫秒为单位(是:
let diff = new Date('2022-04-01T17:41:47.000Z') - Date.now();
其中diff的负值表示时间戳已过去。要将差值转换为秒,请将结果除以1000。
如果在完全相同的时间运行,则无论本地偏移的系统设置如何,diff的值都将相同(当然考虑到时钟精度(。
要将时间戳解析为本地,请删除Z:
let diff = new Date('2022-04-01T17:41:47.000') - Date.now();
然而,这会将时间戳表示的即时时间偏移本地偏移量,因此对于具有不同偏移量的每个系统,将返回不同的diff值。考虑到时间戳有一个偏移量,这似乎不是一件明智的事情,因此它旨在表示一个单独的时刻,而不是根据主机偏移量的多少不同的时刻中的一个(有多少不同的偏移量,如果包括历史偏移量,可能有数百个(。