用那种方式构建的日期使用本地时区,从而使得构建的日期不正确。要设置特定日期对象的时区是从包括时区的日期字符串构造它。(我在旧版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()
返回 星期中的第几天。
new Date().toString()
将显示当前时区的时间表示形式,new Date().toUTCString()
将显示UTC时间表示形式,但new Date().getTime()
始终是UTC时间,因为Unix时间被定义为“Unix时间(也称为POSIX时间或时代时间)是一种描述时间瞬间的系统,它被定义为自协调世界时(UTC)1970年1月1日星期四00:00:00以来经过的秒数,不包括闰秒。” - Amadan