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

问题描述:

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

解决方案1:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

短而时髦:

+ new Date()

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

细节:

在几乎所有当前浏览器上,您都可以使用 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 或 this 以及对位运算符的进一步解释)。

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

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

或使用在线工具:magictools.dev/#!/tools/timestamp-to-date

这工作正常:stackoverflow.com/a/72047159/8119511

解决方案2:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

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

+new Date

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

Date.now()

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

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

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

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

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

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

解决方案3:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

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

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

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

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

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

解决方案4:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

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

time();

解决方案5:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

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

快速而肮脏的解决方案:

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

按位运算将导致使用 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 的版本感到满意,请考虑支持 this 答案,因为我自己没有找到它。

现在稍微解释一下 |0 的作用:

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

在该转换过程中,小数被删除,产生与使用 Math.floor() 输出的结果相似的结果。

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

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

解决方案6:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

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

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

解决方案7:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

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

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

解决方案8:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

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

var timestamp = $.now();

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

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

解决方案9:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

console.log(new Date().valueOf()); // 返回自 epoch 以来的毫秒数

解决方案10:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

日期,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:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

表现

今天 - 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 在所有浏览器上都很慢

https://i.stack.imgur.com/lCTrK.png

细节

铬的结果

https://i.stack.imgur.com/Eaco2.png

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

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

函数 A() { return new Date().getTime(); } function B() { return new Date().valueOf(); } function C() { return +new Date(); } function D() { return new Date()*1; } 函数 E() { 返回日期.now(); } function F() { return Number(new Date()); } function G() { // 此解决方案返回从加载页面开始计算的时间。 //(在 Chrome 上它提供更好的精度) return performance.now(); } // 测试日志 = (n,f) => console.log(${n} : ${f()});日志(‘A’,A);日志(‘B’,B);日志(‘C’,C);日志(‘D’,D);日志(‘E’,E);日志(‘F’,F);日志(‘G’,G);此代码段仅显示外部基准测试中使用的代码

原文链接:https://www.huntsbot.com/qa/Dk2n/how-do-you-get-a-timestamp-in-javascript?lang=zh_CN

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

你可能感兴趣的:(javascript,vim,es,c++)