如何获取JavaScript时间戳?
与Unix时间戳类似,即代表当前时间和日期的单个数字。可以是数字或字符串。
如何获取JavaScript时间戳?
与Unix时间戳类似,即代表当前时间和日期的单个数字。可以是数字或字符串。
Answers:
+ new Date()
一元运算符(例如)plus
会触发对象中的valueOf
方法,Date
并返回时间戳(不做任何更改)。
细节:
在几乎所有当前的浏览器上,您都可以使用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());
~~(Date.now() / 1000)
Date.now()
+new Data
很聪明,但其他开发人员无法读取。Date.now()
更清晰,并确保其他所有人都知道发生了什么事。
我喜欢这个,因为它很小:
+new Date
我也喜欢这样,因为它很短,并且与现代浏览器兼容,并且有500多人投票认为它更好:
Date.now()
new Date().getTime()
。对我来说幸运的是,更快的解决方案已经是显而易见的解决方案!
new Date().toString()
称为。
+
操作员正在做些什么使它像弦一样出来?
JavaScript自时期起以毫秒为单位运行,而大多数其他语言以秒为单位运行。您可以以毫秒为单位工作,但是只要您传递一个值来表示PHP,PHP本机函数就可能会失败。因此,请确保我始终使用秒,而不是毫秒。
这将为您提供Unix时间戳(以秒为单位):
var unix = Math.round(+new Date()/1000);
这将为您提供自纪元以来的毫秒数(不是Unix时间戳):
var milliseconds = new Date().getTime();
Unix timestamp
VS Seconds since the Epoch
。这两个人不应该是同一件事吗?
var time = Date.now || function() {
return +new Date;
};
time();
我在此答案中提供了多种解决方案及其说明。如果有任何不清楚的地方,请随时提出问题
。PS:可悲的是,有人在没有给予任何嘉奖的情况下将其合并为最佳答案。
快速而肮脏的解决方案:
Date.now() /1000 |0
警告:如果执行魔术操作,它可能会在2038年中断并返回负数
|0
。使用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的文档中所述使用,这会使polyfill过时,因为$.now()
内部执行相同的操作:(new Date).getTime()
如果您只是对jQuery的版本感到满意,请考虑否决这个答案,因为我自己没有找到它。
现在简要说明一下|0
功能:
通过提供|
,您告诉解释器进行二进制或运算。位运算需要绝对数字,这会将十进制结果从Date.now() / 1000
整数转换为整数。
在该转换过程中,将删除小数,从而得到与使用相同的结果,Math.floor()
但使用的代码更少。
但请注意:它将64位double转换为32位整数。处理大量数据时,这将导致信息丢失。由于32位整数溢出,时间戳将在2038年之后中断。
有关Date.now
此链接的更多信息,请访问:Date.now()
@ MDN
new Date/1e3|0
。
jQuery提供了自己的方法来获取时间戳:
var timestamp = $.now();
(除了它只是实现(new Date).getTime()
表达式)
REF: http : //api.jquery.com/jQuery.now/
parseInt
,因为结果值始终为Number
。
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
+new Date
.. :)
Date.now()
除了其他选项外,如果您想要一个日期格式ISO,则可以直接获取它
console.log(new Date().toISOString());
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
只是加起来,这是一个返回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;
}
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();
我还没见过的那一个
Math.floor(Date.now() / 1000); // current time in seconds
我还没见过的另一个是
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
Date.now() /1000 |0
做同样的
Math.floor()
,但只是为了弄清楚它与|0
。我不想伤害你或任何东西。我只是想告诉您,您已经以某种方式获得了答案。通过查看所有给定的答案,有些人会以某种方式注意到最低限度。
_.now()
是有点过头了。我建议仅导入需要使用的Lodash功能(在本例中为NPM上的_.now()),但是即使他们已经弃用了其包,而只使用了Date.now()
。
该Date.getTime()
方法可以稍作调整即可使用:
getTime方法返回的值是自1970年1月1日UTC以来的毫秒数。
floor
如果需要,将结果除以1000得到Unix时间戳:
(new Date).getTime() / 1000
该Date.valueOf()
方法在功能上等效于Date.getTime()
,这使得可以对日期对象使用算术运算符来获得相同的结果。我认为,这种方法会影响可读性。
new Date().getTime() / 1000
()
经过new Date
和.getTime()
自/
定投Date对象分成若干反正。
该代码Math.floor(new Date().getTime() / 1000)
可以缩短为new Date / 1E3 | 0
。
考虑跳过直接getTime()
调用并| 0
用作Math.floor()
功能的替代。最好记住它的1E3
等价物更短1000
(将大写字母E优先于小写字母E表示1E3
为常数)。
结果,您得到以下信息:
var ts = new Date / 1E3 | 0;
console.log(ts);
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
37 -14 = 23字节;
Math.floor()
由|0
是使该代码“清晰易懂”。请解释一下替换1000
为来节省1个字节的意义是什么1E3
?这是荒唐的。我看到错误的代码。
今天-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上最慢铬的结果
您可以在此处对计算机进行测试
测试中使用的代码显示在下面的代码片段中
performance.now()
,我会很感兴趣,因为它在印章方面应该是最准确的。
privacy.reduceTimerPrecision
将结果四舍五入到最接近毫秒的结果。默认情况下,它也是启用的,但可以禁用。developer.mozilla.org/en-US/docs/Web/API/Performance/now
我强烈建议使用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的方法,请参阅其文档
对于具有微秒分辨率的时间戳,有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)))
。
// 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>
任何不支持Date.now的浏览器,您都可以使用它来获取当前日期时间:
currentTime = Date.now() || +new Date()
Date.now
是在尝试调用它之前,使用三元运算符断言实际存在(并且是一个函数)currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
。
前几天,我从JQuery Cookie的源代码中学到了一种非常酷的方法,可以将给定的Date对象转换为Unix时间戳。
这是一个例子:
var date = new Date();
var timestamp = +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);
}
};
撰写本文时,最高答案是9年了,此后发生了很多变化-尤其是,我们对非hacky解决方案几乎提供了普遍支持:
Date.now()
如果要绝对确定这不会在某些古老的(preie9)浏览器中出现,可以将其置于检查之后,例如:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
当然,这将返回自纪元时间以来的毫秒数,而不是秒数。
更简单的方法:
var timeStamp=event.timestamp || new Date().getTime();
event
从哪里来。您需要对解决方法进行更好的解释,而不是编写答案。请!