你如何获得JavaScript的时间戳?

时间:2008-10-21 09:29:33

标签: javascript date datetime timestamp unix-timestamp

如何在JavaScript中获取时间戳?

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

41 个答案:

答案 0 :(得分:4545)

简短&时髦:

+ new Date()

plus之类的一元运算符会触发valueOf对象中的Date方法,并返回时间戳(不做任何更改)。

<强>详细信息:

在几乎所有当前浏览器上,您都可以使用Date.now()毫秒获取UTC时间戳;一个值得注意的例外是IE8及更早版本(见compatibility table)。

你可以很容易地为此做一个垫片:

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

要在中获取时间戳,您可以使用:

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

或者您也可以使用:

Date.now() / 1000 | 0

哪个应该稍快一些,但也不太可读(同样see this answer)。

我建议使用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());

答案 1 :(得分:472)

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

+new Date

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

Date.now()

答案 2 :(得分:254)

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

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

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

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

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

答案 3 :(得分:136)

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

time();

答案 4 :(得分:114)

我提供了多个解决方案,并在此答案中提供了说明。如果有任何不清楚的地方,请随时提问
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 )
     

当然它会打破夏令时,但取决于你   正在构建这可能对你有用,如果你需要做二进制   int32之后的时间戳操作将在2038年中断。

     

这也将返回负值,但仅限于该PC的用户   你正在运行你的代码正在改变他们的PC时钟至少   去年12月31日。


如果你只是想知道从代码运行到第一次的相对时间,你可以使用这样的东西:

var relativeTime = (function () {
    var start = Date.now();
    return function () {
        return Date.now() - start
    }
})();

如果您使用的是jQuery,可以使用jQuery's Docs中所述的$.now(),这会使填充过时,因为$.now()内部执行同样的操作:(new Date).getTime()

如果您对jQuery的版本感到高兴,请考虑提出this回复,因为我自己没有找到它。


现在对|0所做的一个小小的解释:

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

在转换过程中,会删除小数,导致与使用Math.floor()但使用较少代码的结果相同。

  

请注意:它会将64位双精度转换为32位整数。这会在处理大量数据时导致信息丢失。由于32位整数溢出,时间戳将在2038年后中断。


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

答案 5 :(得分:80)

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

答案 6 :(得分:58)

jQuery 提供its own method来获取时间戳:

var timestamp = $.now();

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

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

答案 7 :(得分:40)

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

答案 8 :(得分:39)

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

答案 9 :(得分:38)

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

&#13;
&#13;
console.log(new Date().toISOString());
&#13;
&#13;
&#13;

答案 10 :(得分:33)

日期,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();

答案 11 :(得分:28)

我还没见过

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

我还没看到的另一个是

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

答案 12 :(得分:26)

可以使用Date.getTime()方法进行一些调整:

  

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

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

(new Date).getTime() / 1000

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

答案 13 :(得分:24)

代码package main import "fmt" import "strconv" func main() { var a int16 a = 5 s := fmt.Sprintf("%d", a) s2 := strconv.Itoa(int(a)) fmt.Println(s) fmt.Println(s2) } 可缩短为Math.floor(new Date().getTime() / 1000)

考虑跳过直接getTime()调用,并使用new Date / 1E3 | 0替代Math.floor()函数。 记住| 01E3的较短等效值(大写E优于小写,表示1000为常量)。

结果您得到以下内容:

&#13;
&#13;
1E3
&#13;
&#13;
&#13;

答案 14 :(得分:21)

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

答案 15 :(得分:20)

这是一个生成时间戳的简单函数,格式为: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())));
}

答案 16 :(得分:20)

您只能使用

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

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

答案 17 :(得分: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>

答案 18 :(得分:18)

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

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

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

答案 19 :(得分:17)

今天-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)的结果:

enter image description here

我观察到Date.now()是为所有三个浏览器获取时间戳的最快方法。 Safari每秒可完成1920万次操作,Firefox达到1610万次,Chrome 780万次。

new Date()*1对于Chrome(2.8M)和Firefox(2.6M)而言是最慢的。 Number(new Date())对于Safari(2.9M)最慢。

因此,优胜者的JS代码是Date.now(),最快的浏览器是Safari(比chrome快2倍!)。

您可以在https://jsperf.com/timestamp-test-x上对计算机进行测试。

答案 20 :(得分:16)

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

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

答案 21 :(得分:14)

这个有一个解决方案:在js中将unix时间戳转换为时间尝试此

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

答案 22 :(得分:14)

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

以下是一个例子:

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

答案 23 :(得分:14)

如果想要一种在Node.js中生成时间戳的基本方法,这种方法效果很好。

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

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

希望这有帮助,上面的方法也可以正常工作但我发现这是我们在Node.js中最简单的方法。

答案 24 :(得分:13)

这似乎有效。

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

答案 25 :(得分:12)

对于lodashunderscore个用户,请使用_.now

var timestamp = _.now(); // in milliseconds

答案 26 :(得分:10)

Moment.js可以消除处理Javascript日期的许多痛苦。

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

moment().unix();

答案 27 :(得分:9)

截至撰写本文时,最佳答案是9年,自那时以来发生了很多变化 - 尤其是,我们几乎普遍支持非黑客解决方案:

Date.now()

如果你想绝对肯定这不会在一些古老的(pre ie9)浏览器中破解,你可以把它放在支票后面,如下:

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

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

MDN Documentation on Date.now

答案 28 :(得分:8)

更简单的方法:

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

答案 29 :(得分:6)

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

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

答案 30 :(得分:4)

var d = new Date();
console.log(d.valueOf()); 

答案 31 :(得分:4)

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

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

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

答案 32 :(得分:3)

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

答案 33 :(得分:2)

有很多方法可以做到。

 Date.now() 
 new Date().getTime() 
 new Date().valueOf()
<块引用>

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

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

答案 34 :(得分: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);

答案 35 :(得分:1)

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

答案 36 :(得分:1)

获取JavaScript时间戳

  

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

     

如果您不打算支持

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

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

  

返回所需的时间戳

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

答案 37 :(得分:0)

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

>> Return current timestamp

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

>> Return required timestamp

答案 38 :(得分:0)

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

new Date().toISOString()

  

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

答案 39 :(得分:0)

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

$ ps -ef | awk '$2<100'

答案 40 :(得分:-19)

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