问答中心分类: JAVASCRIPT如何在 JavaScript 中获取时间戳?
0
匿名用户 提问 52分钟 前

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

29 Answers
0
xer0x 回答 52分钟 前

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

+new Date

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

Date.now()
inanutshellus 回复 52分钟 前

@Billy我记得,我在两个建议的解决方案中计算了时间戳,每个 1M 次,并计算了平均运行时间。我在 Firefox 和 Chrome 中运行它,getTime 在两种浏览器中都更快。也就是说,即使它(稍微)慢我也会选择new Date().getTime().对我来说幸运的是,更快的解决方案已经是清晰的解决方案!

Jason T Featheringham 回复 52分钟 前

同意@FabrícioMatté。一元操作员的行为可能不是初级的,但如果你没有复习过它,不要指望能够在很多团队中有效地发挥作用。

kirb 回复 52分钟 前

@Niklaus 那是因为您将它连接到另一个字符串。在这种情况下,new Date().toString()叫做。

ansiart 回复 52分钟 前

+ 在这种情况下是一元数学。 typeof (+new Date()) 计算结果为“数字”。基本上它是 new Date().valueOf() 的简写——没有 javascript 函数调用。但是不要这样写,它看起来像一个错字。

1j01 回复 52分钟 前

@Niklaus 在这种情况下,您将需要另一个加号来充当一元运算符:'NEW-' + +new Date

Marcus Johansson 回复 52分钟 前

+new Date 似乎在 Chrome 52 中不起作用,如果想要的效果是生成一个整数。我相信它适用于较旧的 Chrome。

xer0x 回复 52分钟 前

@MarcusJohansson 人们应该使用Date.now()如果他们使用的是 Chrome 等较新的浏览器。我在 Chrome 52 和 Chrome Canary 55 中试过这个+new Date仍然有效。

xer0x 回复 52分钟 前

@FelixGagnon-Grenier 我添加了Date.now()因为它现在是首选方式,很多人不喜欢+new Date.我喜欢 daveb 的回答现在包括+new Date,并解释它,但它也不习惯。

FrancescoMM 回复 52分钟 前

因此,要检索计算机中已经存在的数值,您需要创建一个对象,调用需要 int 的运算符并触发调用函数 (valueOf) 的转换,该函数调用调用函数 (getTime) 的类转换方法,最后调用函数 (getTime)检索已经存在的值。然后该对象被丢弃到它的命运中,并且在循环的 1000 次迭代之后,您有 1000 个需要垃圾收集的已删除 Date 对象挂在那里,这些对象突然全部转储在一起,当您的计算机滞后时,您想知道发生了什么。 🙂

ruffin 回复 52分钟 前

+0 代表“超过 357 人投票认为它更好” 因为我们不给 SO 上的搞笑票。但是 +1 表示好的答案。而且因为它很有趣。;^)(当它是一种语言功能时,我确实厌倦了“看起来像错字”的抱怨。~~是一个很好的截断,但人们提出了同样的抱怨。但如果它不存在,就会有人发明它,你知道吗?学习语言,357 人!好有趣。)

Umair Riaz 回复 52分钟 前

如果你想知道的逻辑plus标志是:+用作toInt()它将忽略所有字符并仅返回数字

0
Daithí 回答 52分钟 前

JavaScript 使用自纪元以来的毫秒数,而大多数其他语言使用秒数。您可以使用毫秒,但是一旦您传递一个值说 PHP,PHP 本机函数可能会失败。所以要确保我总是使用秒,而不是毫秒。
这将为您提供一个 Unix 时间戳(以秒为单位):

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

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

var milliseconds = new Date().getTime();
0
GottZ 回答 52分钟 前

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

快速而肮脏的解决方案:

Date.now() /1000 |0

警告: 它可能打破 2038 并返回负数,如果你这样做|0魔法。利用Math.floor()到那时

Math.floor()解决方案:

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

一些书呆子的选择Derek 朕会功夫取自此答案下方的评论:

new Date/1e3|0

Polyfill 得到Date.now()在职的:
要让它在 IE 中工作,你可以这样做(Polyfill fromMDN):

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 的文档这使得 polyfill 过时了,因为$.now()在内部做同样的事情:(new Date).getTime()
如果您对 jQuery 的版本感到满意,请考虑投票this回答,因为我自己没有找到。

现在稍微解释一下|0做:
通过提供|,你告诉解释器做一个二元或操作。
位运算需要绝对数,这会将十进制结果从Date.now() / 1000成整数。
在该转换过程中,小数被删除,结果与使用的结果相似Math.floor()会输出。

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

有关更多信息Date.now按照这个链接:Date.now()@MDN

0
Staale 回答 52分钟 前
var time = Date.now || function() {
  return +new Date;
};

time();
0
aemkei 回答 52分钟 前
var timestamp = Number(new Date()); // current time as number