在编写 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()返回毫秒,而不是普通秒。
getTime()
对于 UTC/Unix 时间戳,以下内容就足够了:
Math.floor((new Date()).getTime() / 1000)
它将当前时区偏移量计入结果中。对于字符串表示,回答有效。
澄清:
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()返回 星期几 。
getUTCDate()
getUTCDay()