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


Answers

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

+new Date

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

Date.now()
Question

我怎样才能在JavaScript中获得时间戳?

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




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

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

将结果除以1000以获得Unix时间戳,如果需要的话,

(new Date).getTime() / 1000

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




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

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




我学会了一种非常酷的方式,将日期对象从JQuery Cookie的源代码转换为Unix时间戳。

这是一个例子:

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



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



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

time();



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



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

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



我强烈建议使用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







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



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

考虑跳过直接的Date.getTime()调用并使用| 0 | 0代替Math.floor()函数。 同样值得注意的是, 1E31000的较短等价物(大写E比小写字母更适合将1E3表示为常量)。

结果你得到以下结果:

var ts = new Date / 1E3 | 0;

console.log(ts);




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

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



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

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



在写这篇文章时,最重要的答案是9岁,自那以后发生了很多变化 - 尤其是,我们几乎普遍支持一种非hacky的解决方案:

Date.now()

如果你想绝对确定这一点在古代(pre ie9)浏览器中不会被破解,你可以把它放在一张支票上,如下所示:

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

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

MDN






Links