类似于 Unix 的时间戳,它是一个代表当前时间和日期的数字。作为数字或字符串。
短而时髦:
+ new Date()
像 plus
这样的一元运算符触发 Date
对象中的 valueOf
方法并返回时间戳(没有任何更改)。
细节:
在几乎所有当前浏览器上,您都可以使用 Date.now()
以 毫秒 获取 UTC 时间戳;一个值得注意的例外是 IE8 和更早版本(参见 compatibility table)。
不过,您可以轻松地为此制作垫片:
if (!Date.now) {
Date.now = function() { return new Date().getTime(); }
}
要以秒为单位获取时间戳,您可以使用:
Math.floor(Date.now() / 1000)
或者,您可以使用:
Date.now() / 1000 | 0
这应该会稍微快一些,但可读性也会降低。
(还有 see this answer 或 this 以及对位运算符的进一步解释)。
我建议使用 Date.now()
(带有兼容性垫片)。它稍微好一点,因为它更短&不创建新的 Date
对象。但是,如果您不想要 shim &最大兼容性,您可以使用“旧”方法以 毫秒 为单位获取时间戳:
new Date().getTime()
然后您可以将其转换为秒,如下所示:
Math.round(new Date().getTime()/1000)
您还可以使用我们上面展示的 valueOf
方法:
new Date().valueOf()
以毫秒为单位的时间戳
var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now(); console.log(timeStampInMs, Date.now());
我喜欢这个,因为它很小:
+new Date
我也喜欢这个,因为它很短并且与现代浏览器兼容,超过 500 人投票认为它更好:
Date.now()
new Date().getTime()
。对我来说幸运的是,更快的解决方案已经是清晰的解决方案!
new Date().toString()
。
Date.now()
,因为它现在是首选方式,而且很多人不喜欢 +new Date
。我喜欢 daveb 的答案现在包括 +new Date
,并对其进行了解释,但它也不习惯。
JavaScript 使用自纪元以来的毫秒数,而大多数其他语言使用秒数。您可以使用毫秒,但是一旦您传递一个值说 PHP,PHP 本机函数可能会失败。所以要确保我总是使用秒,而不是毫秒。
这将为您提供一个 Unix 时间戳(以秒为单位):
var unix = Math.round(+new Date()/1000);
这将为您提供自纪元以来的毫秒数(不是 Unix 时间戳):
var milliseconds = new Date().getTime();
var time = Date.now || function() {
return +new Date;
};
time();
我在这个答案中提供了多种带有描述的解决方案。如果有任何不清楚的地方,请随时提出问题
快速而肮脏的解决方案:
Date.now() /1000 |0
警告:如果你使用 |0 魔法,它可能会在 2038 年中断并返回负数。到那时使用 Math.floor()
Math.floor()
解决方案:
Math.floor(Date.now() /1000);
Derek 朕會功夫 的一些书呆子替代方法取自此答案下方的评论:
new Date/1e3|0
Polyfill 让 Date.now()
工作:
要让它在 IE 中工作,您可以这样做(来自 MDN 的 Polyfill):
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
如果您不关心年份/星期几/夏令时,则需要记住 2038 年之后的日期:
按位运算将导致使用 32 位整数而不是 64 位浮点。
您需要正确使用它:
Math.floor(Date.now() / 1000)
如果您只想知道从代码第一次运行开始的相对时间,您可以使用以下内容:
const relativeTime = (() => {
const start = Date.now();
return () => Date.now() - start;
})();
如果您使用的是 jQuery,您可以使用 jQuery's Docs 中所述的 $.now()
,这会使 polyfill 过时,因为 $.now()
在内部执行相同的操作:(new Date).getTime()
如果您只是对 jQuery 的版本感到满意,请考虑支持 this 答案,因为我自己没有找到它。
现在稍微解释一下 |0
的作用:
通过提供 |
,您可以告诉解释器执行二进制 OR 运算。
位运算需要绝对数字,它将 Date.now() / 1000
的十进制结果转换为整数。
在该转换过程中,小数被删除,产生与使用 Math.floor()
输出的结果相似的结果。
但请注意:它将 64 位双精度转换为 32 位整数。在处理大量数字时,这将导致信息丢失。由于 32 位整数溢出,时间戳将在 2038 年之后中断,除非 Javascript 在严格模式下移动到 64 位整数。
有关 Date.now
的更多信息,请点击此链接:Date.now()
@ MDN
var timestamp = Number(new Date()); // current time as number
除了其他选项,如果你想要一个 dateformat ISO,你可以直接得到它
console.log(new Date().toISOString());
jQuery 提供 its own method 来获取时间戳:
var timestamp = $.now();
(除了它只是实现 (new Date).getTime()
表达式)
参考: http://api.jquery.com/jQuery.now/
console.log(new Date().valueOf()); // 返回自 epoch 以来的毫秒数
日期,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 上最慢
解决方案 C、D、F 在所有浏览器上都很慢
https://i.stack.imgur.com/lCTrK.png
细节
铬的结果
https://i.stack.imgur.com/Eaco2.png
您可以在您的机器上执行测试 HERE
测试中使用的代码显示在下面的代码片段中
函数 A() { return new Date().getTime(); } function B() { return new Date().valueOf(); } function C() { return +new Date(); } function D() { return new Date()*1; } 函数 E() { 返回日期.now(); } function F() { return Number(new Date()); } function G() { // 此解决方案返回从加载页面开始计算的时间。 //(在 Chrome 上它提供更好的精度) return performance.now(); } // 测试日志 = (n,f) => console.log(`${n} : ${f()}`);日志('A',A);日志('B',B);日志('C',C);日志('D',D);日志('E',E);日志('F',F);日志('G',G);此代码段仅显示外部基准测试中使用的代码
加起来,这是一个在 Javascript 中返回时间戳字符串的函数。示例:下午 15:06:38
function displayTime() {
var str = "";
var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()
var seconds = currentTime.getSeconds()
if (minutes < 10) {
minutes = "0" + minutes
}
if (seconds < 10) {
seconds = "0" + seconds
}
str += hours + ":" + minutes + ":" + seconds + " ";
if(hours > 11){
str += "PM"
} else {
str += "AM"
}
return str;
}
一个我还没看过
Math.floor(Date.now() / 1000); // current time in seconds
另一个我还没有看到的是
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
稍作调整即可使用 Date.getTime()
方法:
getTime 方法返回的值是自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。
将结果除以 1000 以获得 Unix 时间戳,如有必要,floor
:
(new Date).getTime() / 1000
Date.valueOf()
方法在功能上等同于 Date.getTime()
,这使得可以在日期对象上使用算术运算符来获得相同的结果。在我看来,这种方法会影响可读性。
代码 Math.floor(new Date().getTime() / 1000)
可以缩短为 new Date / 1E3 | 0
。
考虑跳过直接 getTime()
调用并使用 | 0
作为 Math.floor()
函数的替代品。记住 1E3
是 1000
的更短等价物也很好(大写 E 比小写更适合将 1E3
表示为常数)。
结果,您得到以下结果:
var ts = 新日期 / 1E3 | 0;控制台.log(ts);
我强烈推荐使用 moment.js
。要获取自 UNIX 纪元以来的毫秒数,请执行
moment().valueOf()
要获取自 UNIX 纪元以来的秒数,请执行
moment().unix()
您还可以像这样转换时间:
moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()
我一直这样做。没有双关语的意思。
要在浏览器中使用 moment.js
:
<script src="moment.js"></script>
<script>
moment().valueOf();
</script>
有关更多详细信息,包括安装和使用 MomentJS 的其他方式,请参阅他们的 docs
对于具有微秒分辨率的时间戳,有 performance.now
:
function time() {
return performance.now() + performance.timing.navigationStart;
}
例如,这可能会产生 1436140826653.139
,而 Date.now
只会产生 1436140826653
。
这是一个生成时间戳的简单函数,格式为:mm/dd/yy hh:mi:ss
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())));
}
(new (chain (-date) (to-i-s-o-string)))
。
你只能使用
var timestamp = new Date().getTime();控制台.log(时间戳);
获取当前时间戳。无需做任何额外的事情。
// 当前的 Unix 时间戳 // 自 1970 年 1 月 1 日以来的 1443534720 秒。(UTC) // 秒 console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720 console.log(Math.floor(Date.now() / 1000)); // 1443534720 console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720 // 毫秒 console.log(Math.floor(new Date().valueOf())); // 1443534720087 console.log(Math.floor(Date.now())); // 1443534720087 console.log(Math.floor(new Date().getTime())); // 1443534720087 // jQuery // 秒 console.log(Math.floor($.now() / 1000)); // 1443534720 // 毫秒 console.log($.now()); // 1443534720087
如果是用于记录目的,您可以使用 ISOString
new Date().toISOString()
“2019-05-18T20:02:36.694Z”
任何不支持 Date.now 的浏览器,您可以使用它来获取当前日期时间:
currentTime = Date.now() || +new Date()
Date.now
确实存在(并且是一个函数):currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
。
这似乎有效。
console.log(clock.now);
// returns 1444356078076
console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16
console.log(clock.format(clock.now + clock.add(10, 'minutes')));
//returns 10/8/2015 21:08:18
var clock = {
now:Date.now(),
add:function (qty, units) {
switch(units.toLowerCase()) {
case 'weeks' : val = qty * 1000 * 60 * 60 * 24 * 7; break;
case 'days' : val = qty * 1000 * 60 * 60 * 24; break;
case 'hours' : val = qty * 1000 * 60 * 60; break;
case 'minutes' : val = qty * 1000 * 60; break;
case 'seconds' : val = qty * 1000; break;
default : val = undefined; break;
}
return val;
},
format:function (timestamp){
var date = new Date(timestamp);
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hours = date.getHours();
var minutes = "0" + date.getMinutes();
var seconds = "0" + date.getSeconds();
// Will display time in xx/xx/xxxx 00:00:00 format
return formattedTime = month + '/' +
day + '/' +
year + ' ' +
hours + ':' +
minutes.substr(-2) +
':' + seconds.substr(-2);
}
};
这个有一个解决方案:在 js 中将 unixtime stamp 转换为 tim 试试这个
var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
前几天,我从 JQuery Cookie 的源代码中学到了一种将给定 Date 对象转换为 Unix 时间戳的非常酷的方法。
这是一个例子:
var date = new Date();
var timestamp = +date;
如果想要一种在 Node.js 中生成时间戳的基本方法,这很有效。
var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );
我们的团队正在使用它来破坏 localhost 环境中的缓存。输出为 /dist/css/global.css?v=245521377
,其中 245521377
是 hrtime()
生成的时间戳。
希望这会有所帮助,上面的方法也可以工作,但我发现这是满足我们在 Node.js 中需要的最简单的方法。
Moment.js 可以抽象出处理 Javascript 日期的许多麻烦。
请参阅:http://momentjs.com/docs/#/displaying/unix-timestamp/
moment().unix();
moment().valueOf()
。看我的回答。
在撰写本文时,最佳答案是 9 年,从那时起发生了很多变化 - 尤其是,我们几乎普遍支持非 hacky 解决方案:
Date.now()
如果您想绝对确定这不会在某些古老的(ie9 之前)浏览器中中断,您可以将其置于检查后,如下所示:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
这将返回自纪元时间以来的毫秒数,当然,不是秒。
更简单的方法:
var timeStamp=event.timestamp || new Date().getTime();
event
来自哪里。您需要更好地解释解决问题的方式,而不是写答案。请!
plus
符号的逻辑是:+
用作toInt()
,它将忽略所有字符并仅返回数字