我想要一个表示当前日期和时间的数字,比如Unix时间戳。
当前回答
表演
今天-2020.04.23我对选定的解决方案进行测试。我在Chrome 81.0、Safari 13.1和Firefox 75.0上测试了MacOs High Sierra 10.13.6
结论
Solution Date.now()(E)在Chrome和Safari上最快,在Firefox上第二快,这可能是快速跨浏览器解决方案的最佳选择解决方案性能.now()(G),令人惊讶的是,它比Firefox上的其他解决方案快100多倍,但在Chrome上最慢解决方案C、D、F在所有浏览器上都很慢
细节
铬的结果
您可以在此处对机器进行测试
测试中使用的代码显示在下面的代码段中
函数A(){return new Date().getTime();}函数B(){return new Date().valueOf();}函数C(){return+new Date();}函数D(){返回新日期()*1;}函数E(){return Date.now();}函数F(){return Number(new Date());}函数G(){//此解决方案返回从加载页面开始计算的时间。//(在Chrome上,它提供了更好的精度)return performance.now();}//测试log=(n,f)=>console.log(`${n}:${f()}`);日志('A',A);日志('B',B);日志('C',C);日志('D',D);对数('E',E);日志('F',F);日志('G',G);此代码段仅显示外部基准测试中使用的代码
其他回答
要分别获得时间、月、日、年,这将起作用
var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var time = Date.now || function() {
return +new Date;
};
time();
function getTimeStamp() {
var now = new Date();
return ((now.getMonth() + 1) + '/' +
(now.getDate()) + '/' +
now.getFullYear() + " " +
now.getHours() + ':' +
((now.getMinutes() < 10)
? ("0" + now.getMinutes())
: (now.getMinutes())) + ':' +
((now.getSeconds() < 10)
? ("0" + now.getSeconds())
: (now.getSeconds())));
}
对于微秒分辨率的时间戳,有性能。现在:
function time() {
return performance.now() + performance.timing.navigationStart;
}
例如,这可能产生1436140826653.139,而Date.now仅产生143614086653。
时间戳(毫秒)
要获取自Unix纪元以来的毫秒数,请调用Date.now:
Date.now()
或者,使用一元运算符+调用Date.prototype.valueOf:
+ new Date()
或者,直接调用valueOf:
new Date().valueOf()
要支持IE8和更早版本(请参阅兼容性表),请为Date.now创建一个垫片:
if (!Date.now) {
Date.now = function() { return new Date().getTime(); }
}
或者,直接调用getTime:
new Date().getTime()
时间戳(秒)
要获取自Unix纪元以来的秒数,即Unix时间戳:
Math.floor(Date.now() / 1000)
或者,使用逐位或逐层稍快,但可读性也较低,将来可能会中断(参见解释1、2):
Date.now() / 1000 | 0
以毫秒为单位的时间戳(分辨率更高)
使用performance.now:
var isPerformanceSupported=(窗口.性能&&窗口.性能.当前&&窗口.性能.计时&&窗口.性能.计时.导航开始);var timeStampInMs=(是否支持性能?window.performance.now()+窗口.性能.计时.导航开始:日期.now());console.log(timeStampInMs,Date.now());