以这种方式构建的日期使用本地时区,使构建的日期不正确。设置某个日期对象的时区是从包含时区的日期字符串构造它。(我在旧的 Android 浏览器中使用它时遇到了问题。)
请注意,getTime()
返回毫秒,而不是普通秒。
对于 UTC/Unix 时间戳,以下内容就足够了:
Math.floor((new Date()).getTime() / 1000)
它将当前时区偏移量计入结果。对于字符串表示,David Ellis 的回答有效。
澄清:
new Date(Y, M, D, h, m, s)
该输入被视为本地时间。如果传入UTC 时间,结果会有所不同。观察(我现在在格林威治标准时间 +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()
返回星期几。