我希望有一个单一的数字来表示当前日期和时间,就像Unix时间戳一样。
Date.now()
或者,使用一元运算符+
调用Date.prototype.valueOf
:
+ new Date()
或者,直接调用valueOf
:
new Date().valueOf()
Date.now
创建一个shim: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 = (
window.performance &&
window.performance.now &&
window.performance.timing &&
window.performance.timing.navigationStart
);
var timeStampInMs = (
isPerformanceSupported ?
window.performance.now() +
window.performance.timing.navigationStart :
Date.now()
);
console.log(timeStampInMs, Date.now());
我喜欢这个,因为它很小:
+new Date
我也喜欢这个,因为它同样简短并且兼容现代浏览器,而且有超过500人投票认为它更好:
Date.now()
new Date().getTime()
略微慢一些,我也会选择它。幸运的是,更快的解决方案已经是易于阅读的解决方案! - inanutshellusnew Date().toString()
。 - kirbDate.now()
,因为它现在是首选方式,很多人不喜欢 +new Date
。我喜欢 daveb 的答案现在包括 +new Date
,并解释了它,但以前它没有。 - xer0xJavaScript使用自纪元以来的毫秒数,而大多数其他编程语言使用秒数。你可以使用毫秒数,但是一旦将值传递给PHP等其他语言,原生函数可能会失败。因此,为确保安全起见,我总是使用秒而非毫秒。
以下代码会给你一个Unix时间戳(以秒为单位):
var unix = Math.round(+new Date()/1000);
这会给你距离纪元以来的毫秒数(不是Unix时间戳):
var milliseconds = new Date().getTime();
Date.now() /1000 |0
警告:如果您使用
|0
操作符,可能会在2038年出现错误并返回负数。请在那时改用Math.floor()
。
Math.floor()
解决方案:
Math.floor(Date.now() /1000);
以下是来自Derek 朕会功夫在评论中提出的一些有趣的替代方案:
new Date/1e3|0
获取Date.now()
的Polyfill:
为了在IE中让它工作,您可以这样做(来自MDN的Polyfill):
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Math.floor(Date.now() / 1000)
const relativeTime = (() => {
const start = Date.now();
return () => Date.now() - start;
})();
$.now()
,这使得polyfill过时了,因为$.now()
在内部执行相同的操作:(new Date).getTime()
。如果您只是对jQuery的版本感到满意,请考虑点赞this答案,因为我自己没有找到它。
|0
的作用:|
,可以告诉解释器进行二进制OR运算。Date.now() / 1000
的十进制结果转换为整数。Math.floor()
输出的结果。
请注意:它会将64位双精度浮点数转换为32位整数。如需了解更多关于Date.now
的信息,请访问此链接: Date.now()
@ MDN
var time = Date.now || function() {
return +new Date;
};
time();
var timestamp = Number(new Date()); // current time as number
除其他选项外,如果您想要ISO日期格式,您可以直接获取它
console.log(new Date().toISOString());
日期是 JavaScript 中的一个本地对象,用于获取有关时间的所有数据。
请注意,在 JavaScript 中,时间戳取决于客户端计算机设置,因此它不是100%准确的时间戳。要获得最佳结果,您需要从服务器端获取时间戳。
无论如何,我更喜欢使用原生JavaScript,以下是一种常见的做法:
Date.now(); //return 1495255666921
在 MDN 中如下所述:
Date.now() 方法返回自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的毫秒数。
因为 now() 是 Date 的静态方法,所以您始终使用它作为 Date.now()。
如果您使用的是 ES5 以下版本,则 Date.now();
不起作用,您需要使用:
new Date().getTime();
今天 - 2020.04.23,我对选择的解决方案进行了测试。我在 Chrome 81.0、Safari 13.1 和 Firefox 75.0 上的 MacOs High Sierra 10.13.6 上进行了测试。
Date.now()
(E)在 Chrome 和 Safari 上是最快的,在 Firefox 上排名第二,这可能是快速跨浏览器解决方案的最佳选择performance.now()
(G)令人惊讶的是,在 Firefox 上比其他解决方案快100倍以上,但在 Chrome 上最慢Chrome 的结果
您可以在此处的本机上执行测试
在下面的代码片段中使用了在测试中使用的代码
function A() {
return new Date().getTime();
}
function B() {
return new Date().valueOf();
}
function C() {
return +new Date();
}
function D() {
return new Date()*1;
}
function E() {
return Date.now();
}
function F() {
return Number(new Date());
}
function G() {
// this solution returns time counted from loading the page.
// (and on Chrome it gives better precission)
return performance.now();
}
// TEST
log = (n,f) => console.log(`${n} : ${f()}`);
log('A',A);
log('B',B);
log('C',C);
log('D',D);
log('E',E);
log('F',F);
log('G',G);
This snippet only presents code used in external benchmark
+
被用作toInt()
,它会忽略所有字符,只返回数字。 - Umair Riaz