【问题标题】:Get a UTC timestamp [duplicate]获取 UTC 时间戳 [重复]
【发布时间】:2011-12-24 06:14:09
【问题描述】:

如何在 JavaScript 中获取当前的 UTC 时间戳?我想这样做,以便我可以从客户端发送独立于其时区的时间戳。

【问题讨论】:

  • 需要一个 UTC 时间戳。问题是 Date.getTime() 单独取决于客户端时区。
  • 不,它没有。 Date.getTime 返回一个 UTC 时间戳。
  • @wizzard 你能解释一下为什么new Date(2019, 3).getTime() !== Date.UTC(2019, 3)吗?谢谢。另外,如果我用 getUTC 创建一个新的日期......我永远不会有正确的年份、月份等开始......
  • @RomainVincent 您实际上应该使用 TZ 进行测试:Date.UTC(2021, 15, 18, 4) == new Date(2021, 15, 18, 0).getTime() > true - 我现在落后 UTC 4。见stackoverflow.com/a/58884821/986862

标签: javascript time


【解决方案1】:

您可以使用Date.UTC方法获取UTC时区的时间戳。

用法:

var now = new Date;
var utc_timestamp = Date.UTC(now.getUTCFullYear(),now.getUTCMonth(), now.getUTCDate() , 
      now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());

现场演示http://jsfiddle.net/naryad/uU7FH/1/

【讨论】:

  • 对我来说,这只有在我使用 getUTCMonth、getUTCDate 等时才有效。至少与$ date -u +%s相比时
  • jsfiddle 链接上的 UTC 时间戳不正确。实际上,您的“本地时间戳”是 UTC 时间戳,而您的“UTC 时间戳”是 UTC 纪元与您的本地时间之间的秒数,这并没有真正意义。 Date.getTime 自动返回 UTC 时间戳。
  • 不,它没有。阅读我链接到的documentation。查看您的 jsfiddle 时间戳并将它们与当前的 UTC 时间戳 here 进行比较(或使用上面建议的 $ date -u +%s)。您为什么不尝试将时间戳解析回日期并看看您想出了什么?
  • 是的 @wizzard 是对的,这种方法不会给你正确的 UTC 时间。
【解决方案2】:
new Date().getTime();

有关详细信息,请参阅@James McMahon's answer

【讨论】:

  • 对我来说,在我的 Angular 应用程序中,它返回我的当地时间,而不是 UTC。
  • 请注意,getTime() 返回一个针对我的本地时间而不是 UTC 调整的 Unix 时间戳。 IE。 new Date(2016, 0, 1, 0, 0, 0).getTime() 返回 1451635200000,即 8:00 AM Jan 1st 2016
  • @DouglasGaskell 不,你在这里责怪错误的人。 getTime() 为给定输入返回正确的 UTC 数字,它是 new Date() 返回您当地时区的时间 - GMT-0800 时区的午夜发生在 8:00 AM UTC
  • 感谢 Aprillion 的澄清!最后我明白为什么人们一直说new Date().getTime()Date.now() 是UTC,但是当我尝试console.log(new Date()) 时,它会在我的时区显示时间。 Date 内部有 UTC 时间戳(毫秒)(w/c 是在getTime()now() 中返回的),它还有“你的时区”信息,所以当显示日期时,它会自动显示它在正确的(您的)时区。尝试new Date().toUTCString() 以 UTC 格式查看。如果需要,可以在此处验证 Date.now() 的返回值:currentmillis.com
  • 这没有得到 UTC 日期。我不明白这是如何被接受的。
【解决方案3】:

正如wizzard 指出的,正确的方法是,

new Date().getTime();

under Javascript 1.5,只是

Date.now();

来自documentation

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

如果你想制作一个没有毫秒的时间戳,你可以使用,

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

我想将此作为答案,以便正确的方法更加明显。

您可以将 ExpExc 和 Narendra Yadala 的结果与上述http://jsfiddle.net/JamesFM/bxEJd/ 的方法进行比较,并使用http://www.unixtimestamp.com/ 或在Unix 终端上运行date +%s 进行验证。

【讨论】:

  • 日期.now();返回我的时区的时间戳,而不是 UTC+0。所以我必须用 new Date().getTimezoneOffset(); 修改它;
  • @LukasLiesis 如果您通过console.log(new Date(timestamp)) 进行了测试,那么时区是 Date 对象的属性,而不是时间戳 - 输入必须是自 1970 年 1 月 1 日 UTC 以来的毫秒数,以便Date 对象以在您的本地时区显示正确的时间...如果您调整数字,那么时间将不正确
【解决方案4】:

“...独立于其时区”

var timezone =  d.getTimezoneOffset() // difference in minutes from GMT

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 2015-01-08
    • 2014-03-31
    • 2012-02-28
    • 2014-11-21
    • 2012-05-29
    • 2014-01-04
    • 2017-10-07
    • 2011-02-18
    相关资源
    最近更新 更多