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

在编写Web应用程序时,将(服务器端)所有日期时间作为UTC时间戳存储在数据库中是有意义的。

当我注意到你无法在JavaScript中对时区进行操作时,我感到非常惊讶。

我稍微扩展了Date对象。 这个功能有意义吗? 基本上,每次我向服务器发送任何东西时,都会使用此功能格式化一个时间戳。

你能看到这里的任何重大问题吗? 或者从不同的角度来看解决方案?

Date.prototype.getUTCTime = function(){ 
  return new Date(
    this.getUTCFullYear(),
    this.getUTCMonth(),
    this.getUTCDate(),
    this.getUTCHours(),
    this.getUTCMinutes(), 
    this.getUTCSeconds()
  ).getTime(); 
}

这对我来说似乎有点复杂。 而且我对演出也不太确定。


  • 以这种方式使用当地时区构建的日期,使构建的日期不正确。 设置某个日期对象的时区是从包含时区的日期字符串构造它。 (我在使用旧版Android浏览器时遇到了问题。)

  • 请注意, getTime()返回毫秒数,而不是普通秒数。

  • 对于UTC / Unix时间戳,以下内容应该足够了:

    Math.floor((new Date()).getTime() / 1000)
    

    它会将当前时区偏移量分解到结果中。 对于字符串表示,David Ellis的答案有效。

    澄清:

    new Date(Y, M, D, h, m, s)
    

    该输入被视为当地时间。 如果通过UTC时间,结果会有所不同。 观察(我现在在GMT +02:00,现在是07:50):

    > var d1 = new Date();
    > d1.toUTCString();
    "Sun, 18 Mar 2012 05:50:34 GMT" // two hours less than my local time
    > Math.floor(d1.getTime()/ 1000)
    1332049834 
    
    > var d2 = new Date( d1.getUTCFullYear(), d1.getUTCMonth(), d1.getUTCDate(), d1.getUTCHours(), d1.getUTCMinutes(), d1.getUTCSeconds() );
    > d2.toUTCString();
    "Sun, 18 Mar 2012 03:50:34 GMT" // four hours less than my local time, and two hours less than the original time - because my GMT+2 input was interpreted as GMT+0!
    > Math.floor(d2.getTime()/ 1000)
    1332042634
    

    另请注意, getUTCDate()不能替代getUTCDay() 。 这是因为getUTCDate()返回月份的一天; 而getUTCDay()返回星期几。


    你也可以使用getTimezoneOffset和getTime,

    x = new Date()
    var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000)/1000;
    

    是的,你不需要那么做; 假设我正确理解你,你只需要toUTCString方法。

    var UTCstring = (new Date()).toUTCString();
    

    但是,请记住,获取的日期值取决于客户机器的时钟,而不是服务器。 如果你需要这些日期的精确值(例如,当这个或那个动作相对于另一个用户的动作完成时,要进行正确的排序),无论如何你都不能依赖客户端的日期库,并且你需要计算根据客户与您联系的时间在服务器端进行日期。

    请记住,基本上所有的客户端代码都可以被客户端修改,而恶意的值则会返回,您只能保证服务器端的代码 - 将客户端视为可能的攻击者。

    链接地址: http://www.djcxy.com/p/77467.html

    上一篇: How do I get a UTC Timestamp in JavaScript?

    下一篇: Calculating milliseconds from epoch