4466

类似于 Unix 的时间戳,它是一个代表当前时间和日期的数字。作为数字或字符串。

4

41 回答 41

5537

短而时髦:

+ new Date()

一元运算符 likeplus触发对象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());

于 2008-10-21T09:32:32.487 回答
603

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

+new Date

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

Date.now()
于 2011-02-18T00:33:44.610 回答
302

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

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

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

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

var milliseconds = new Date().getTime();
于 2011-05-11T22:27:05.327 回答
158
var time = Date.now || function() {
  return +new Date;
};

time();
于 2008-10-21T10:05:36.320 回答
157

我在这个答案中提供了多种带有描述的解决方案。如果有任何不清楚的地方,请随时提出问题


快速而肮脏的解决方案:

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 年之后的日期:

按位运算将导致使用 32 位整数而不是 64 位浮点。

您需要正确使用它:

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

如果您只想知道从代码第一次运行开始的相对时间,您可以使用以下内容:

const relativeTime = (() => {
    const start = Date.now();
    return () => Date.now() - start;
})();

如果您使用的是 jQuery,您可以按照jQuery's Docs$.now()中的描述使用,这使得 polyfill 过时了,因为在内部做同样的事情:$.now()(new Date).getTime()

如果您只是对 jQuery 的版本感到满意,请考虑支持这个答案,因为我自己没有找到它。


现在稍微解释一下|0

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

在该转换期间,小数被删除,导致与 usingMath.floor()将输出的结果相似。

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


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

于 2012-07-12T07:15:09.637 回答
95
var timestamp = Number(new Date()); // current time as number
于 2008-10-21T13:00:22.520 回答
65

除了其他选项,如果你想要一个 dateformat ISO,你可以直接得到它

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

于 2016-01-29T15:08:36.643 回答
61

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

var timestamp = $.now();

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

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

于 2013-03-15T14:19:22.083 回答
47

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

于 2009-04-30T16:53:52.557 回答
47

Date是 JavaScript 中的原生对象,是我们获取所有时间数据的方式。

请注意 JavaScript 中的时间戳取决于客户端计算机集,因此它不是 100% 准确的时间戳。要获得最佳结果,您需要从服务器端获取时间戳。

无论如何,我首选的方法是使用香草。这是在 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();
于 2017-05-20T04:49:21.997 回答
46

表现

今天 - 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 上最慢
  • 解决方案 C、D、F 在所有浏览器上都很慢

在此处输入图像描述

细节

铬的结果

在此处输入图像描述

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

测试中使用的代码显示在下面的代码片段中

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

于 2018-06-27T16:33:13.127 回答
44

加起来,这是一个在 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;
}
于 2012-09-21T19:12:49.653 回答
33

一个我还没看过

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

另一个我还没有看到的是

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
于 2014-03-31T08:18:48.013 回答
30

Date.getTime()稍加调整即可使用该方法:

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

floor如有必要,将结果除以 1000 以获得 Unix 时间戳:

(new Date).getTime() / 1000

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

于 2012-05-03T09:02:16.450 回答
26

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

考虑跳过直接getTime()调用并| 0用作函数的替代品Math.floor()1E3记住是一个更短的等价物也很好1000(大写 E 比小写更适合表示1E3为常数)。

结果,您得到以下结果:

var ts = new Date / 1E3 | 0;

console.log(ts);

于 2015-10-14T16:41:30.740 回答
23

我强烈推荐使用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 的其他方式,请参阅他们的文档

于 2015-07-14T08:29:56.083 回答
22

对于具有微秒分辨率的时间戳,有performance.now

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

例如,这可以产生1436140826653.139,而Date.now只给出1436140826653

于 2015-07-06T00:01:55.000 回答
21

这是一个生成时间戳的简单函数,格式为: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())));
}
于 2013-05-21T09:22:20.913 回答
21

你只能使用

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

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

于 2016-03-16T05:45:22.850 回答
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>

于 2015-09-29T13:55:41.480 回答
19

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

new Date().toISOString()

“2019-05-18T20:02:36.694Z”

于 2019-05-18T20:43:00.543 回答
16

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

currentTime = Date.now() || +new Date()
于 2013-05-09T06:53:40.297 回答
15

这似乎有效。

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);
            }
};
于 2015-10-09T02:03:25.737 回答
14

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

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
于 2013-07-01T06:47:59.603 回答
14

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

这是一个例子:

var date = new Date();
var timestamp = +date;
于 2015-03-11T09:52:48.580 回答
14

如果想要一种在 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 中需要的最简单的方法。

于 2015-05-29T13:40:52.797 回答
12

对于lodash下划线用户,请使用_.now.

var timestamp = _.now(); // in milliseconds
于 2015-03-30T08:40:23.620 回答
10

Moment.js可以抽象出处理 Javascript 日期的许多痛苦。

请参阅: http: //momentjs.com/docs/#/displaying/unix-timestamp/

moment().unix();
于 2015-03-06T00:33:36.437 回答
10

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

Date.now()

如果您想绝对确定这不会在某些古老的(ie9 之前)浏览器中中断,您可以将其置于检查后,如下所示:

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

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

Date.now 上的 MDN 文档

于 2017-12-14T10:09:55.357 回答
9

更简单的方法:

var timeStamp=event.timestamp || new Date().getTime();
于 2013-10-26T03:51:22.107 回答
8

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

timestamp : parseInt(new Date().getTime()/1000, 10)
于 2014-04-24T06:46:40.250 回答
5
var d = new Date();
console.log(d.valueOf()); 
于 2015-04-13T08:29:01.533 回答
5

在 JavaScript 中获取时间戳

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

如果你不打算支持< IE8,你可以使用

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

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

返回所需的时间戳

new Date("11/01/2018").getTime()
于 2019-11-26T04:33:05.727 回答
4

就代码可读性而言,建议的正确方法是Number(new Date())

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

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

于 2015-03-27T11:43:20.353 回答
3

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

于 2015-03-26T19:47:12.230 回答
2
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())));
}
于 2018-03-28T05:22:44.773 回答
2

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

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

要以秒为单位获取时间戳,请使用以下方法进行转换:

Math.floor(Date.now() / 1000)
于 2021-01-22T15:54:49.683 回答
2

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

}

于 2021-12-07T20:35:42.643 回答
1

这是在 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);
于 2014-05-22T21:00:20.317 回答
1

要分别获取时间、月、日、年,这将起作用

var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
于 2020-03-02T13:30:36.973 回答
-21
time = Math.round(((new Date()).getTime()-Date.UTC(1970,0,1))/1000);
于 2009-11-11T11:38:57.843 回答