您如何获得JavaScript时间戳?
如何获取JavaScript时间戳?
与Unix时间戳类似,即代表当前时间和日期的单个数字。 可以是数字或字符串。
#1楼
Date.getTime()
方法可以稍作调整即可使用:
getTime方法返回的值是自1970年1月1日UTC以来的毫秒数。
将结果除以1000得到Unix时间戳,必要时floor
:
(new Date).getTime() / 1000
Date.valueOf()
方法在功能上等效于Date.getTime()
,这使得可以对日期对象使用算术运算符来获得相同的结果。我认为,这种方法会影响可读性。
#2楼
我在此答案中提供了多种解决方案及其说明。 如有疑问,请随时提问
附言:可悲的是有人在没有给予好评的情况下将其合并到了最佳答案中。
快速而肮脏的解决方案:
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年之后使用:
var now = (function () {
var year = new Date(new Date().getFullYear().toString()).getTime();
return function () {
return Date.now() - year
}
})();
它的外观的一些输出:
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 )
当然,这会中断夏令时,但是根据您要构建的内容,如果在2038年int32中断后需要在时间戳上执行二进制运算,这可能对您很有用。
这也将返回负值,但前提是您正在运行代码的那台PC的用户至少将其PC的时钟更改为上一年的12月31日。
如果您只是想知道从代码开始运行到开始的相对时间,可以使用以下代码:
var relativeTime = (function () {
var start = Date.now();
return function () {
return Date.now() - start
}
})();
如果您使用的是jQuery,则可以使用$.now()
,如jQuery的文档所述,由于$.now()
内部执行相同的操作,因此使$.now()
已过时: (new Date).getTime()
如果您只是对jQuery的版本感到满意,请考虑否决这个答案,因为我自己没有找到它。
现在对|0
做一个很小的解释:
通过提供|
,您告诉解释器执行二进制或运算。 位运算需要绝对数字,该绝对数字会将Date.now() / 1000
的十进制结果转换为整数。
在该转换过程中,将删除小数,从而得到与使用Math.floor()
相同的结果,但使用的代码更少。
但请注意:它将64位double转换为32位整数。 处理大量数据时,这将导致信息丢失。 由于32位整数溢出,时间戳将在2038年之后中断。
有关Date.now
更多信息,请Date.now
以下链接: Date.now()
@ MDN
#3楼
只是加起来,这是一个返回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;
}
#4楼
jQuery提供了自己的方法来获取时间戳:
var timestamp = $.now();
(除了它只是实现(new Date).getTime()
表达式)
REF: http : //api.jquery.com/jQuery.now/
#5楼
任何不支持Date.now的浏览器,您都可以使用它来获取当前日期时间:
currentTime = Date.now() || +new Date()
#6楼
这是一个生成时间戳的简单函数,格式为: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())));
}
#7楼
这个有一个解决方案:将unixtime戳转换为js中的tim尝试这个
var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
#8楼
更简单的方法:
var timeStamp=event.timestamp || new Date().getTime();
#9楼
简短而时髦:
+ new Date()
像plus
这样的一元运算符会触发Date
对象中的valueOf
方法,并返回时间戳(不做任何更改)。
细节:
在几乎所有当前的浏览器上,您都可以使用Date.now()
来获取UTC时间戳(以毫秒为单位) ; IE8和更早版本是一个明显的例外(请参阅兼容性表 )。
不过,您可以轻松地对此进行填充:
if (!Date.now) {
Date.now = function() { return new Date().getTime(); }
}
要获取以秒为单位的时间戳,可以使用:
Math.floor(Date.now() / 1000)
或者,您可以使用:
Date.now() / 1000 | 0
这应该稍快一些,但可读性也要差一些(另请参见此答案 )。
我建议使用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());
#10楼
var time = Date.now || function() {
return +new Date;
};
time();
#11楼
var timestamp = Number(new Date()); // current time as number
#12楼
我还没见过的那一个
Math.floor(Date.now() / 1000); // current time in seconds
我还没见过的另一个是
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
#13楼
有时我需要在xmlhttp调用的对象中使用它,所以我这样做。
timestamp : parseInt(new Date().getTime()/1000, 10)
#14楼
Moment.js可以减轻处理Javascript Date的许多痛苦。
参见: http : //momentjs.com/docs/#/displaying/unix-timestamp/
moment().unix();
#15楼
前几天,我从JQuery Cookie的源代码中学到了一种非常酷的方法,可以将给定的Date对象转换为Unix时间戳。
这是一个例子:
var date = new Date();
var timestamp = +date;
#16楼
var timestamp = _.now(); // in milliseconds
#17楼
如果需要在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需求的最简单方法。
#18楼
对于具有微秒分辨率的时间戳,具有performance.now
:
function time() {
return performance.now() + performance.timing.navigationStart;
}
例如,这可能会产生1436140826653.139
,而Date.now
仅给出1436140826653
。
#19楼
我强烈建议使用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的方法,请参阅其文档
#20楼
// 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
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
#21楼
这似乎有效。
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);
}
};
#22楼
代码Math.floor(new Date().getTime() / 1000)
可以缩短为new Date / 1E3 | 0
new Date / 1E3 | 0
。
考虑跳过直接的getTime()
调用并使用| 0
| 0
代替Math.floor()
函数。 还记得1E3
是1000
的较短等价项(将1E3
表示为常数,大写E比小写E更可取)。
结果,您得到以下信息:
var ts = new Date / 1E3 | 0; console.log(ts);
#23楼
除其他选项外,如果您想要一个日期格式ISO,则可以直接获取它
console.log(new Date().toISOString());
#24楼
你只能用
var timestamp = new Date().getTime(); console.log(timestamp);
获取当前时间戳。 无需额外做任何事情。
#25楼
Date是JavaScript中的本机对象 ,是我们获取有关时间的所有数据的方式。
请注意,在JavaScript中,时间戳取决于客户端计算机集,因此它不是100%准确的时间戳。 为了获得最佳结果,您需要从服务器端获取时间戳。
无论如何,我的首选方式是使用香草。 这是在JavaScript中执行此操作的常用方法:
Date.now(); //return 1495255666921
在MDN中,提及如下:
Date.now()方法返回自1970年1月1日UTC以来经过的毫秒数。
由于now()是Date的静态方法,因此您始终将其用作Date.now()。
如果您使用的是低于ES5的版本,请使用Date.now();
不起作用,您需要使用:
new Date().getTime();
#26楼
撰写本文时,最高答案是9年了,此后发生了很多变化-尤其是,我们对非骇客解决方案的支持近乎普遍:
Date.now()
如果您要绝对确定这不会在某些古老的(preie9)浏览器中损坏,则可以将其置于检查之后,例如:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
当然,这将返回自纪元时间以来的毫秒数,而不是秒数。
#27楼
我喜欢这个,因为它很小:
+new Date
我也喜欢这样,因为它很短,并且与现代浏览器兼容,并且有500多人投票认为它更好:
Date.now()
#28楼
今天-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)的结果:
正如我观察到的Date.now()
是获取所有三种浏览器时间戳的最快方法。 Safari每秒可完成1920万次操作,Firefox达到1610万次,Chrome 780万次。
对于Chrome(2.8M)和Firefox(2.6M), new Date()*1
最慢。 对于Safari(2.9M), Number(new Date())
最慢。
因此,优胜者的JS代码是Date.now()
,最快的浏览器是Safari(比chrome快2倍!)。
您可以在这里在机器上执行测试: https : //jsperf.com/timestamp-test-x 。
#29楼
JavaScript自时期起以毫秒为单位运行,而大多数其他语言以秒为单位运行。 您可以以毫秒为单位工作,但是只要您传递一个值来表示PHP,PHP本机功能就可能会失败。 因此,请确保我始终使用秒,而不是毫秒。
这将为您提供Unix时间戳(以秒为单位):
var unix = Math.round(+new Date()/1000);
这将为您提供自纪元以来的毫秒数(不是Unix时间戳):
var milliseconds = new Date().getTime();
#30楼
\nconsole.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
\n
下一篇: 司马懿的玄孙司马邺,投降后结局悲惨