为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2019-08-02 16:09:22
如何在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(); }这对我来说似乎有点令人费解。而且我对表现也不太确定。
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

以这种方式构造的日期使用本地时区,使构造日期不正确。设置某个日期对象的时区是从包含时区的日期字符串构造它。(我在使用较旧的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()返回星期几。


查看完整回答
反对 回复 2019-08-02
?
米脂

TA贡献1836条经验 获得超3个赞

你也可以利用getTimezoneOffset和getTime来做到这一点,

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


查看完整回答
反对 回复 2019-08-02
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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


var UTCstring = (new Date()).toUTCString(); console.log('UTCstring', UTCstring);

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

基本上也要记住,客户端基本上可以修改所有客户端代码并返回恶意值,只能保证服务器端的代码 - 将客户端视为可能的攻击者。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 5364 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信