How do you get a timestamp in JavaScript?
如何在JavaScript中获得时间戳?
类似于Unix的时间戳,即表示当前时间和日期的单个数字。可以是数字,也可以是字符串。
短,时髦的:
1 | + new Date() |
像
细节:
在几乎所有当前浏览器上,都可以使用
不过,你可以很容易地做一个垫片:
1 2 3 | if (!Date.now) { Date.now = function() { return new Date().getTime(); } } |
要获得以秒为单位的时间戳,可以使用:
1 | Math.floor(Date.now() / 1000) |
或者你也可以用:
1 | Date.now() / 1000 | 0 |
这应该会稍微快一点,但也不太容易读(也请参阅这个答案)。
我建议使用
1 | new Date().getTime() |
然后你可以像这样把它转换成秒:
1 | Math.round(new Date().getTime()/1000) |
你也可以使用我们上面展示的
1 | new Date().valueOf() |
时间戳以毫秒为单位
1 2 3 | 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()); |
我喜欢这个,因为它很小:
1 | +new Date |
我也喜欢这个,因为它和现代浏览器一样短,而且兼容,超过500人投票认为它更好:
1 | Date.now() |
JavaScript使用从纪元开始的毫秒数,而大多数其他语言使用秒数。您可以使用毫秒,但只要传递一个值给PHP, PHP本机函数可能就会失败。所以我总是用秒,而不是毫秒。
这将给您一个Unix时间戳(以秒为单位):
1 | var unix = Math.round(+new Date()/1000); |
这将给你毫秒自历元(不是Unix时间戳):
1 | var milliseconds = new Date().getTime(); |
1 2 3 4 5 | var time = Date.now || function() { return +new Date; }; time(); |
我在这个答案中提供了多个解决方案,并进行了描述。如果有什么不清楚的地方,尽管提出来PS:遗憾的是,有人把这句话合并到了最上面的答案中,却没有给出答案的出处。
快速和肮脏的解决方案:
1 | Date.now() /1000 |0 |
Warning: it might break in 2038 and return negative numbers if you do the
|0 magic. UseMath.floor() instead by that time
1 | Math.floor(Date.now() /1000); |
一些书呆子替代德里克。朕會功夫从评论下面的回答:
1 | new Date/1e3|0 |
Polyfill使
要让它在IE中工作,你可以这样做(Polyfill来自MDN):
1 2 3 4 5 | if (!Date.now) { Date.now = function now() { return new Date().getTime(); }; } |
如果你不关心年/日/周/夏令时,你可以把它拿掉,2038年后再用:
1 2 3 4 5 6 | var now = (function () { var year = new Date(new Date().getFullYear().toString()).getTime(); return function () { return Date.now() - year } })(); |
Some output of how it will look:
1
2
3
4 new Date()
Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleurop?ische Zeit )
new Date(now())
Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleurop?ische Zeit )Of course it will break daylight saving time but depending on what you
are building this might be useful to you if you need to do binary
operations on timestamps after int32 will break in 2038.This will also return negative values but only if the user of that PC
you are running your code on is changing their PC's clock at least to
31th of december of the previous year.
如果你只是想知道从代码第一次运行到现在的相对时间,你可以这样做:
1 2 3 4 5 6 | var relativeTime = (function () { var start = Date.now(); return function () { return Date.now() - start } })(); |
如果您正在使用jQuery,您可以使用jQuery文档中描述的
如果您对jQuery的版本很满意,请考虑投票支持这个答案,因为我自己也没有找到它。
现在简单解释一下
通过提供
在转换期间,小数被删除,结果与使用
Be warned though: it will convert a 64 bit double to a 32 bit integer. This will result in information loss when dealing with huge numbers. Timestamps will break after 2038 due to 32 bit integer overflow.
有关
1 | var timestamp = Number(new Date()); // current time as number |
jQuery提供了自己的方法来获取时间戳:
1 | var timestamp = $.now(); |
(此外它只是实现了
裁判:http://api.jquery.com/jQuery.now/
1 | console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch |
加起来,这里有一个函数在Javascript中返回一个时间戳字符串。例如:15:06:38点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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; } |
除了其他选项,如果您想要一个dateformat ISO,您可以直接获得它
1 | console.log(new Date().toISOString()); |
Date, JavaScript中的原生对象是我们获取所有关于时间的数据的方式。
在JavaScript中要注意时间戳依赖于客户机计算机集,所以它不是100%准确的时间戳。要获得最佳结果,您需要从服务器端获取时间戳。
总之,我更喜欢香草。这是在JavaScript中常用的方法:
1 | Date.now(); //return 1495255666921 |
在MDN中,具体如下:
The Date.now() method returns the number of milliseconds elapsed since
1 January 1970 00:00:00 UTC.
Because now() is a static method of Date, you always use it as Date.now().
如果你使用的版本低于ES5,
1 | new Date().getTime(); |
一个我还没见过的
1 | Math.floor(Date.now() / 1000); // current time in seconds |
另一个我还没见过的是
1 2 | var _ = require('lodash'); // from here https://lodash.com/docs#now _.now(); |
The value returned by the getTime method is the number of milliseconds
since 1 January 1970 00:00:00 UTC.
将结果除以1000得到Unix时间戳,如有必要,
1 | (new Date).getTime() / 1000 |
代码
考虑跳过直接的
因此,您得到以下信息:
1 2 3 | var ts = new Date / 1E3 | 0; console.log(ts); |
我强烈推荐使用
1 | moment().valueOf() |
要获得自UNIX纪元以来的秒数,请执行以下操作
1 | moment().unix() |
你也可以这样转换时间:
1 | moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf() |
我经常这样做。没有双关。
要在浏览器中使用
1 2 3 4 | <script src="moment.js"></script> <script> moment().valueOf(); </script> |
有关更多细节,包括安装和使用MomentJS的其他方法,请参阅他们的文档
下面是一个生成时间戳的简单函数,格式为:mm/dd/yy hh:mi:ss
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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()))); } |
你只能用
1 2 | var timestamp = new Date().getTime(); console.log(timestamp); |
获取当前时间戳。不需要做任何额外的事情。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // The Current Unix Timestamp // 1443534720 seconds since Jan 01 1970. (UTC) // seconds 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 // milliseconds console.log(Math.floor(new Date().valueOf())); // 1443534720087 console.log(Math.floor(Date.now())); // 1443534720087 console.log(Math.floor(new Date().getTime())); // 1443534720087 // jQuery // seconds console.log(Math.floor($.now() / 1000)); // 1443534720 // milliseconds console.log($.now()); // 1443534720087 |
1 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> |
对于微秒分辨率的时间戳,有
1 2 3 | function time() { return performance.now() + performance.timing.navigationStart; } |
例如,这可以生成
任何浏览器不支持日期。现在,你可以用这个获取当前日期时间:
1 | currentTime = Date.now() || +new Date() |
今天- 2018.06.27我提供了一些纯js解决方案的时间对比。这对于那些想用JS轻松/高效地获取/测量时间的人来说是很有用的。实时应用,如模拟,游戏等)
在MacOs High Sierra 10.13.3的Chrome 67.0.3396.99(64位)、Safari 11.0.3(13604.5.6)和Firefox 59.0.2(64位)上测试。在下面的截图中,我向你展示了最快的浏览器(Safari)的结果:
据我观察,
对于Chrome (2.8M)和Firefox (2.6M)来说,
所以胜出的JS代码是
您可以在这里的机器上执行测试:https://jsperf.com/timestamp-test-x。
这个有一个解决方案:在js中将unixtime戳记转换为tim
1 2 3 4 | var a = new Date(UNIX_timestamp*1000); var hour = a.getUTCHours(); var min = a.getUTCMinutes(); var sec = a.getUTCSeconds(); |
如果需要在Node.js中生成时间戳的基本方法,可以使用这个方法。
1 2 | var time = process.hrtime(); var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 ); |
我们的团队正在使用它来破坏本地主机环境中的缓存。输出是
希望这能有所帮助,上面的方法也可以工作,但是我发现这是Node.js中最简单的方法。
前几天,我从JQuery Cookie的源代码中学到了一种非常酷的方法,可以将给定的日期对象转换为Unix时间戳。
这里有一个例子:
1 2 | var date = new Date(); var timestamp = +date; |
这似乎行得通。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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); } }; |
对于lodash和下划线用户,使用
1 | var timestamp = _.now(); // in milliseconds |
js可以抽象出处理Javascript日期时的许多痛苦。
参见:http://momentjs.com/docs/ /显示/ unix时间戳
1 | moment().unix(); |
写这篇文章的时候,最热门的答案是9年前的,自那以后发生了很多变化——尤其是,我们几乎普遍支持非hacky解决方案:
1 | Date.now() |
如果你想绝对肯定这不会在一些古老的(ie9之前的)浏览器中崩溃,你可以把它放在一个复选框后面,就像这样:
1 | const currentTimestamp = (!Date.now ? +new Date() : Date.now()); |
当然,这将返回自历元时间以来的毫秒,而不是秒。
MDN文档,现在
更简单的方法:
1 | var timeStamp=event.timestamp || new Date().getTime(); |
有时,我需要它在对象中用于xmlhttp调用,所以我喜欢这样做。
1 | timestamp : parseInt(new Date().getTime()/1000, 10) |
建议正确的方法是
此外,UglifyJS和google - close - compiler将降低解析后的代码逻辑树的复杂性(如果您使用它们中的一个来隐藏/缩小您的代码,这是相关的)。
对于时间分辨率较低的Unix时间戳,只需用
1 2 | var d = new Date(); console.log(d.valueOf()); |
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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()))); } |
下面是用JavaScript生成时间戳的另一个解决方案——包括填充单个数字的方法——在结果中使用日、月、年、小时、分钟和秒(jsfiddle上的工作示例):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var pad = function(int) { return int < 10 ? 0 + int : int; }; var timestamp = new Date(); timestamp.day = [ pad(timestamp.getDate()), pad(timestamp.getMonth() + 1), // getMonth() returns 0 to 11. timestamp.getFullYear() ]; timestamp.time = [ pad(timestamp.getHours()), pad(timestamp.getMinutes()), pad(timestamp.getSeconds()) ]; timestamp.now = parseInt(timestamp.day.join("") + timestamp.time.join("")); alert(timestamp.now); |
1 2 3 4 5 6 7 | new Date().getTime(); and Date.now(); >> Return current timestamp new Date("11/01/2018").getTime() >> Return required timestamp |
1 | time = Math.round(((new Date()).getTime()-Date.UTC(1970,0,1))/1000); |