如何在JavaScript中获取时间戳?

我想要一个代表当前日期和时间的数字,比如unix时间戳

3829514 次浏览

时间戳(毫秒)

要获取自unix纪元以来的毫秒数,请调用#0

Date.now()

或者,使用一元操作符+调用#1

+ new Date()

或者,直接拨打#0

new Date().valueOf()

要支持IE8及更早版本(请参阅兼容性表),请为Date.now创建垫片

if (!Date.now) {Date.now = function() { return new Date().getTime(); }}

或者,直接拨打#0

new Date().getTime()

时间戳秒

要获取自unix纪元以来的秒数,即unix时间戳

Math.floor(Date.now() / 1000)

或者,使用按位或到地板会稍微快一些,但可读性也较差,将来可能会中断(参见解释12):

Date.now() / 1000 | 0

时间戳(毫秒)(更高分辨率)

使用#0

var isPerformanceSupported = (window.performance &&window.performance.now &&window.performance.timing &&window.performance.timing.navigationStart);
var timeStampInMs = (isPerformanceSupported ?window.performance.now() +window.performance.timing.navigationStart :Date.now());
console.log(timeStampInMs, Date.now());

var time = Date.now || function() {return +new Date;};
time();
var timestamp = Number(new Date()); // current time as number

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

time = Math.round(((new Date()).getTime()-Date.UTC(1970,0,1))/1000);

我喜欢它,因为它很小:

+new Date

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

Date.now()

JavaScript使用自纪元以来的毫秒数,而大多数其他语言使用秒。你可以使用毫秒,但一旦你传递一个值说PHP,PHP本机函数可能会失败。所以可以肯定的是,我总是使用秒,而不是毫秒。

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

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

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

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

#0方法可以稍微调整一下:

getTime方法返回的值是毫秒数自1970年1月1日00:00:00 UTC.

将结果除以1000以获得Unix时间戳,必要时为#0

(new Date).getTime() / 1000

Date.valueOf()方法在功能上等同于Date.getTime(),这使得可以在date对象上使用算术运算符来实现相同的结果。在我看来,这种方法会影响易读性。

我在这个答案里提供了多种不同的解法和描述,有不清楚的地方欢迎大家提问题


快速和肮脏的解决方案:

Date.now() /1000 |0

警告:如果你使用|0魔法,它可能会在2038年中断并返回负数。到那时用Math.floor()代替

Math.floor()解决方案:

Math.floor(Date.now() /1000);

一些书呆子的选择由Derek俺会功夫从下面的评论这个答案:

new Date/1e3|0

PolyFill让Date.now()工作:

要让它在IE中工作,你可以这样做(Polyill从MDN):

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,您可以使用$.now(),如jQuery的Docs中所述这会使Poly填充过时,因为$.now()在内部做同样的事情:(new Date).getTime()

如果你只是对jQuery的版本感到满意,考虑投票<强>这个答案,因为我自己没有找到它。


现在来解释一下|0的作用:

通过提供|,您告诉解释器执行二进制OR操作。
位操作需要绝对数,将Date.now() / 1000的十进制结果转换为整数。

在转换期间,小数被删除,导致与使用Math.floor()输出的结果类似。

但要注意:它将64位双精度转换为32位整数。
这将导致处理大量数据时的信息丢失。由于32位整数溢出,时间戳将在2038年后中断,除非Javascript在严格模式下移动到64位整数。


有关Date.now的更多信息,请点击此链接:Date.now()@MDN

只是加起来,这里有一个函数在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;}

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

var timestamp = $.now();

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

参考:http://api.jquery.com/jQuery.now/

任何不支持Date.now浏览器,您可以使用它来获取当前日期时间:

currentTime = Date.now() || +new Date()

下面是一个简单的函数,用于生成格式为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())));}

这个有一个解决方案:在js中将unixtime戳转换为Tim试试这个

var a = new Date(UNIX_timestamp*1000);var hour = a.getUTCHours();var min = a.getUTCMinutes();var sec = a.getUTCSeconds();

更简单的方法:

var timeStamp=event.timestamp || new Date().getTime();

一个我还没见过的

Math.floor(Date.now() / 1000); // current time in seconds

另一个我还没见过的是

var _ = require('lodash'); // from here https://lodash.com/docs#now_.now();

有时我需要它在对象中用于xmlhttp调用,所以我喜欢这样。

timestamp : parseInt(new Date().getTime()/1000, 10)

这是另一个在JavaScript中生成时间戳的解决方案-包括单个数字的填充方法-在其结果中使用日,月,年,小时,分钟和秒(工作示例jsfiddle):

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

Moment.js可以抽象掉处理Javascript Dates的很多痛苦。

见:http://momentjs.com/docs/#/displaying/unix-timestamp/

moment().unix();

前几天,我从jQuery Cookie的源代码中学到了一种非常酷的方法,可以将给定的Date对象转换为Unix时间戳。

这里有一个例子:

var date = new Date();var timestamp = +date;

var my_timestamp = ~~(Date.now()/1000);

建议的正确方法是Number(new Date()),在代码易读性方面,

此外,UglifyJS和Google-Closure-Compiler将降低解析代码逻辑树的复杂性(如果您使用其中之一来模糊/缩小代码,则相关)。

对于时间分辨率较低的Unix时间戳,只需将当前数字除以1000,保持整体。

对于豆沙强调用户,请使用_.now

var timestamp = _.now(); // in milliseconds
var d = new Date();console.log(d.valueOf());

如果想要一个基本的方法来生成一个时间戳在Node.js这工作得很好。

var time = process.hrtime();var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );

我们的团队正在使用它来破坏localhost环境中的缓存。输出是/dist/css/global.css?v=245521377,其中245521377hrtime()生成的时间戳。

希望这有帮助,上面的方法也可以工作,但我发现这是满足我们Node.js.需求的最简单方法

对于具有微秒分辨率的时间戳,有#0

function time() {return performance.now() + performance.timing.navigationStart;}

例如,这可能会产生1436140826653.139,而Date.now只会产生1436140826653

我强烈建议使用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的其他方法,请参阅其文档

// The Current Unix Timestamp// 1443534720 seconds since Jan 01 1970. (UTC)
// secondsconsole.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720console.log(Math.floor(Date.now() / 1000)); // 1443534720console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720
// millisecondsconsole.log(Math.floor(new Date().valueOf())); // 1443534720087console.log(Math.floor(Date.now())); // 1443534720087console.log(Math.floor(new Date().getTime())); // 1443534720087
// jQuery// secondsconsole.log(Math.floor($.now() / 1000)); // 1443534720// millisecondsconsole.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

这似乎奏效了。

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 formatreturn formattedTime = month + '/' +day + '/' +year + ' ' +hours + ':' +minutes.substr(-2) +':' + seconds.substr(-2);}};

代码Math.floor(new Date().getTime() / 1000)可以缩短为new Date / 1E3 | 0

考虑跳过直接#0调用并使用| 0作为#2函数的替代品。最好记住1E31000的较短等价物(大写E比小写E更适合将1E3表示为常量)。

因此,您将获得以下内容:

var ts = new Date / 1E3 | 0;
console.log(ts);

除了其他选项,如果你想要一个日期格式的ISO,你可以直接得到它

console.log(new Date().toISOString());

您只能使用

    var timestamp = new Date().getTime();console.log(timestamp);

来获取当前时间戳。不需要做任何额外的事情。

日期,JavaScript中的本机对象是我们获取有关时间的所有数据的方式。

在JavaScript中要小心,时间戳取决于客户端计算机设置,因此它不是100%准确的时间戳。要获得最佳结果,您需要从服务端获取时间戳。

无论如何,我更喜欢的方式是使用vanilla。这是在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();

在撰写本文时,最高答案是9岁,从那时起发生了很多变化-尤其是,我们几乎普遍支持非hacky解决方案:

Date.now()

如果你想绝对确定这不会在一些古老的(ie9之前)浏览器中崩溃,你可以把它放在检查后面,如下所示:

const currentTimestamp = (!Date.now ? +new Date() : Date.now());

这将返回自纪元时间以来的毫秒,当然不是秒。

MDN上的文档Date.now

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

性能

今天-2020.04.23我对所选的解决方案进行测试。我在Chrome81.0、Safari13.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在所有浏览器上都很慢

在此处输入图片描述

详情

Chrome的搜索结果

在此处输入图片描述

您可以在您的机器上执行测试这里

测试中使用的代码如下所示

function A() {return new Date().getTime();}
function B() {return new Date().valueOf();}
function C() {return +new Date();}
function D() {return new Date()*1;}
function E() {return Date.now();}
function F() {return Number(new Date());}
function G() {// this solution returns time counted from loading the page.// (and on Chrome it gives better precission)return performance.now();}


// TEST
log = (n,f) => console.log(`${n} : ${f()}`);
log('A',A);log('B',B);log('C',C);log('D',D);log('E',E);log('F',F);log('G',G);
This snippet only presents code used in external benchmark

如果是为了记录目的,您可以使用ISOString

new Date().toISOString()

"2019-05-18 T 20:02:36.694 Z"

在JavaScript中获取时间戳

在JavaScript中,时间戳是自1970年1月1日以来经过的毫秒数。

如果您不打算支持

new Date().getTime(); + new Date(); and Date.now();

直接获取时间戳,而无需创建新的Date对象。

返回所需的时间戳

new Date("11/01/2018").getTime()

要获得时间,月,日,年分别这将工作

var currentTime = new Date();var month = currentTime.getMonth() + 1;var day = currentTime.getDate();var year = currentTime.getFullYear();

有很多方法可以做到这一点。

 Date.now()new Date().getTime()new Date().valueOf()

要以秒为单位获取时间戳,请使用以下命令对其进行转换:

Math.floor(Date.now() / 1000)

//if you need 10 digitsalert('timestamp '+ts());function ts() {return parseInt(Date.now()/1000);
}

/*** Equivalent to PHP's time(), which returns* current Unix timestamp.** @param  {string}  unit    - Unit of time to return.*                           - Use 's' for seconds and 'ms' for milliseconds.* @return {number}*/time(unit = 's') {return unit == 's' ? Math.floor(Date.now() / 1000) : Date.now()}