题 你如何获得JavaScript的时间戳?


如何在JavaScript中获取时间戳?

与Unix的时间戳类似的东西,即代表当前时间和日期的单个数字。无论是数字还是字符串。


3367
2017-10-21 09:29


起源


如何在JS中获得64位时间戳? - Alexander Mills
@AlexanderMills由于JavaScript不支持64位整数,因此您必须获得两个32位整数。问另一个问题。 - wizzwizz4


答案:


短而时髦:

+ 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 目的。但是,如果您不想要垫片和最大兼容性,则可以使用“旧”方法来获取时间戳 毫秒

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());


4159
2017-10-21 09:32



另一个值得注意的例外是node.js.我来自Google,希望在节点中做同样的事情 - Milan Babuškov
惯于 Date.now() / 1000 | 0 受苦的 2038年的问题? new Date('Jan 1, 2039') / 1000 | 0 == -2117514496 - gengkev
甚至,没有使用Math.floor .. ~~(Date.now() / 1000) - code ninja
@MilanBabuškov但node.js支持 Date.now() - OrangeDog
而 +new Data 很聪明,其他开发人员无法读取。 Date.now() 更清楚,并确保其他人都知道发生了什么。 - Harry Sadler


我喜欢这个,因为它很小:

+new Date

我也喜欢这个,因为它与现代浏览器一样短,并且与现代浏览器兼容,超过500人投票表示它更好:

Date.now()

432
2018-02-18 00:33



这个选项是个坏主意。它很容易被忽视,看起来像一个错字,实际上是依赖于语言的副作用。我看到糟糕的代码。 - inanutshellus
@Billy我记得,我在两个建议的解决方案中计算了每次1M次的时间戳,并计算了平均运行时间。我在Firefox和Chrome中运行它,两种浏览器的getTime都更快。也就是说,即使它(稍微)慢了我也会选择 new Date().getTime()。幸运的是,更快的解决方案已经是清晰易懂的解决方案! - inanutshellus
同意@FabrícioMatté。一元的操作员行为可能并不简陋,但是如果你没有对它进行抨击,那么就不要期望能够在很多团队中有效地运作。 - Jason T Featheringham
@Niklaus那是因为你将它连接到另一个字符串。在这种情况下, new Date().toString() 叫做。 - kirb
出于好奇,这是什么 +操作员做它让它像一个字符串出来? - Grundizer


JavaScript使用自纪元以来的毫秒数,而大多数其他语言使用秒。您可以使用毫秒,但只要您传递一个值来表示PHP,PHP本机函数可能会失败。所以要确保我总是使用秒,而不是毫秒。

这将为您提供Unix时间戳(以秒为单位):

var unix = Math.round(+new Date()/1000);

这将为您提供自纪元以来的毫秒数(不是Unix时间戳):

var milliseconds = new Date().getTime();

230
2018-05-11 22:27



PHP应该可以在几毫秒内正常工作,因为它将自己与microtime()函数一起使用。 - Nico Burns
虽然存在microtime(),但php中大多数与时间相关的函数都希望时间戳以秒为单位而不是毫秒。更重要的是microtime()返回一个float(如果你传递true),其中小数部分是秒的分数(精确到微秒),而newDate()。getTime()返回一个int,其中它只计算毫秒数时代。例如(php)如果你要调用floor(microtime(true)),这实际上与调用time()相同,以秒为单位,而不是微秒或毫秒。如上所述除以1000是最简单的解决方案。 - gregghz
使用地板而不是圆形。 700毫秒仍然不是整秒 - Anagmate


var time = Date.now || function() {
  return +new Date;
};

time();

126
2017-10-21 10:05



为何选择||运营商? Date.now()在所有浏览器上都不可用吗? - Chris Noe
显然不是,我在modulejs中找到了代码 - Staale
Date.now() 来自JavaScript 1.5,IE 8不支持。 - Søren Løvborg
尚未更新以支持Date.now方法的引擎可以使用以下填充程序解决缺少它的问题:if(!Date.now){Date.now = function now(){return +(new Date); }; } - Per Quested Aronsson
IE完全是癌症。 - SkuraZZ


我在这个答案中提供了多个解决方案和描述。如果有任何不清楚的地方,请随时提问
PS:遗憾的是有人将此合并到最佳答案而没有给予信任。


快速又脏的解决方案:

Date.now() /1000 |0

警告:它 威力 如果你这样做,在2038年休息并返回负数 |0 魔法。使用 Math.floor() 而是那个时候


95
2017-07-12 07:15



| 0类似于Math.floor(),因为它是一个位操作(不适用于浮点数)。通常它比Math.floor()更快,因为它不是函数调用,它是一个原生的javascript运算符。 - GottZ
Date.now() 参考: developer.mozilla.org/en-US/docs/JavaScript/Reference/... - Web_Designer
@Christophe你为什么这么认为?因为IE修复?除了那部分我认为非常简单和可定制。 - GottZ
polyfills /垫片并不复杂。它们是必须支持9种不同浏览器版本的结果,并且业界决定选择它们采用的标准以及它们刚刚组成的标准。 - rlemon
作为参考,您可以得到的最紧凑 new Date/1e3|0。 - Derek 朕會功夫


var timestamp = Number(new Date()); // current time as number

69
2017-10-21 13:00





jQuery的 提供 它自己的方法 获取时间戳:

var timestamp = $.now();

(除了它只是实现 (new Date).getTime() 表达)

REF:  http://api.jquery.com/jQuery.now/


50
2018-03-15 14:19



jQuery还将处理与不同JavaScript API的任何跨浏览器兼容性问题。 - Henry Heleine
@VisioN我找了一种方法在Node.js中做时间戳。我在stackoverflow中发现了一个javascript问题,我在jQuery中得到了一个答案,但没有帮助。 Javascript和jQuery是两件事。如果我们给出每个javascript框架的答案,我们最终会得到一个可能无数的答案,这与stackoverflow中的Q / A哲学相悖。也: i.stack.imgur.com/Ledgt.gif :d - Pierre Arlaud
@PierreArlaud你在谈论什么样的哲学? jQuery是一个世界Nr。 1个用纯JavaScript编写的库,其主要目标是提供跨浏览器的实用方法。从答案中可以看出,jQuery使用了 (new Date).getTime() 方法,因此即使在IE6中使用它也足够安全,与之相反,例如, Date.now()。否则,如果您正在开发一个网站并使用jQuery,为什么不使用简短有用的解决方案 $.now() 而不是浪费你的时间,在纯JS中寻找通用代码。这与此处给出的其他相同内容答案至少有所不同。 - VisioN
@VisioN谁说javascript需要在浏览器中使用? - Pierre Arlaud
@PierreArlaud谁说这个问题只关于NodeJS? - VisioN


只是为了加起来,这是一个在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;
}

36
2017-09-21 19:12



OP询问整数时间戳;这是时间的字符串表示。 - Brad Koch
“类似于Unix的时间戳,即代表当前时间的单个数字” - Brad Koch
我有一个显示时间的代码,但澳大利亚的部分地区显示了完整的日期,这个脚本帮我分解并显示正确。 (+1为此) - Syfer


console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch


34
2018-04-30 16:53



这等于 +new Date.. :) - Kenan Sulayman
做就是了 Date.now() - Orlando
@Orlando看到其他答案,now()的问题是浏览器支持 - Christophe
@Christophe只做一个简单的polyfill, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/... - Orlando
@Orlando确切地说,不要只做Date.now() - Christophe