Javascript Firefox中的Date对象总是将毫秒四舍五入为数百

Javascript Firefox中的Date对象总是将毫秒四舍五入为数百,javascript,datetime,firefox,rounding,Javascript,Datetime,Firefox,Rounding,我在最近使用console.time时偶然发现了这种行为。在Firefox中,它总是返回0毫秒或100毫秒。这是因为日期总是四舍五入到数百毫秒。例如,+newdate()将返回1552469978800而不是1552469978877。你知道这是什么时候的事吗?我怎么可能知道确切的时间?还影响setTimeout和setInterval 这是因为日期总是四舍五入到数百毫秒 我在*nix上的Firefox v65中没有看到这种行为,在Windows上的v48、v56、v57或v65中也没有看到这种

我在最近使用
console.time
时偶然发现了这种行为。在Firefox中,它总是返回0毫秒或100毫秒。这是因为日期总是四舍五入到数百毫秒。例如,
+newdate()
将返回
1552469978800
而不是
1552469978877
。你知道这是什么时候的事吗?我怎么可能知道确切的时间?还影响
setTimeout
setInterval

这是因为日期总是四舍五入到数百毫秒

我在*nix上的Firefox v65中没有看到这种行为,在Windows上的v48、v56、v57或v65中也没有看到这种行为

但如果它发生在某些版本或平台上,则可能是对其的响应。出于同样的原因,我会指出()的替代方法没有其他方法有用,因为:

时间戳实际上不是高分辨率的。为了缓解安全威胁(如Spectre),浏览器目前在不同程度上对结果进行了取舍。(Firefox开始在Firefox 60中舍入到1毫秒。)一些浏览器也可能会稍微随机化时间戳。在未来的版本中,精度可能会再次提高;浏览器开发人员仍在调查这些定时攻击,以及如何最好地缓解它们

试试这个:

函数转换(ms){
var秒=毫秒/1000;
var小时=parseInt(秒/3600);
秒=秒%3600;
var分钟=parseInt(秒/60);
秒=秒%60;
var pad=函数(x){return(x<10)?“0”+x:x;}
返回板(小时数)+“:”+
pad(分钟)+“:”+
pad(秒);
}
var时间=100000000;

console.log(转换(时间))终于找到了这个问题的最终答案。整个问题是
隐私。在最新版本的Firefox中默认启用指纹设置

在这种情况下,指纹保护可能会带来更多的问题。您现在完全无法在Javascript中正确设置时区,因此某些web应用程序(例如Slack)将始终显示GMT+0时间,而不是您的实际时间

另一件恼人的事情是,使用
setInterval
setTimeout
函数的JavaScript动画(尤其影响jQuery插件)现在以每秒10帧的速度运行


禁用指纹保护后,重新启动浏览器后一切正常。

我在Linux上使用Firefox v65,也在Firefox v64上进行了测试,两者的结果都是四舍五入的。可能有些平台真的不受此影响。谢谢你的回答@lamka02sk-我也在使用Linux,所以这…很奇怪。