您如何获得 JavaScript 时间戳?

如何获取 JavaScript 时间戳?

Unix 时间戳类似,即代表当前时间和日期的单个数字。可以是数字或字符串。

答案

简短而时髦:

+ new Date()

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

细节:

在几乎所有当前的浏览器上,您都可以使用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());

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

+new Date

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

Date.now()

JavaScript 自时期起以毫秒为单位运行,而大多数其他语言以秒为单位运行。您可以以毫秒为单位工作,但是只要您传递一个值来表示 PHP,PHP 本机功能就可能会失败。因此,请确保我始终使用秒,而不是毫秒。

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

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

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

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

time();

我在此答案中提供了多种解决方案及其说明。如有疑问,请随时提问
附言:可悲的是有人在没有给予好评的情况下将其合并到了最佳答案中。


快速而肮脏的解决方案:

Date.now() /1000 |0

警告 :如果执行|0魔术,则它可能会在 2038 年中断并返回负数。到那时使用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 的文档所述,由于$.now()内部执行相同的操作,因此使$.now()已过时: (new Date).getTime()

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


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

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

在该转换过程中,将删除小数,从而得到与使用Math.floor()相同的结果,但使用的代码更少。

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


有关Date.now更多信息,请Date.now以下链接: Date.now() @ MDN

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

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

var timestamp = $.now();

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

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

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

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

除其他选项外,如果您想要一个日期格式 ISO,则可以直接获取它

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