嗯,你可能会认为这个问题已被提出,但我认为它没有。我读过的所有解决方案都有这个"拼图游戏"技术(如getUTCMonth() + getUTCMinutes + ...
)。
但由于我只想比较两个UTC(!)日期之间的经过秒数,因此不适用。
众所周知,您可以通过以下方式获取当前(非UTC)日期:
var d = new Date();
var t_millis = d.getTime();
但这不是我想要的。我希望以毫秒为单位以UTC 和表示当前系统日期,因此根本不要乱用字符串。变量t_millis
的AFAIK将包含GMT中当前时间戳的毫秒值,而不是UTC。
(因为d
也在GMT中。除非 getTime()执行一种隐式时区转换,即添加偏移 BEFORE 给出毫秒,但是我从来没有在任何地方读过这些内容)
除了将偏移量添加到时间值之外,还有其他方法吗?
我非常想念其他语言中的getUTCTimeMillis()
函数。
答案 0 :(得分:30)
这是一个老问题,但为了新访问者,这里是正确答案:
Date.now();
返回自1970年1月1日00:00:00 UTC以来经过的毫秒数
答案 1 :(得分:19)
无论您的时区如何,时间的毫秒值都将相同。也就是说,地球上没有时区彼此相差大于零的毫秒数。 (它们可能相差整数小时甚至几分钟,但不是秒或毫秒。)
也就是说,从getTime()
返回的值是 UTC相对时间戳。如果地球上广泛不同位置的两个Web浏览器同时创建一个Date对象,它们将从.getTime()
获得相同的值(假设时钟是同步的,这当然是不太可能的)。 / p>
这里:1338585185539这是我刚从浏览器中获取的时间戳。我现在在德克萨斯州的奥斯汀,现在是下午4点13分(因此时间戳将在此之前略有增加)。将其插入计算机上的Date实例,看看它的内容。
(编辑 - 为了后人的缘故,该时间戳是2012年6月1日。)
答案 2 :(得分:5)
怎么样:
var now = new Date();
var utc_now = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
console.log('UTC: ' + utc_now) // correct UTC time but wrong timezone!
console.log('UTC (in ms): ' + utc_now.getTime())
答案 3 :(得分:5)
我已使用此功能解决问题。
function getUTCNow()
{
var now = new Date();
var time = now.getTime();
var offset = now.getTimezoneOffset();
offset = offset * 60000;
return time - offset;
}
答案 4 :(得分:1)
要从UTC日期获取时间戳,您需要考虑该日期的时区和夏令时。例如,1月或7月的日期可能意味着1小时的差异。
以下选项就是这样。
Date.prototype.getUTCTime = function () {
return this.getTime() - (this.getTimezoneOffset() * 60000);
};
可以用作:
var date = new Date();
var timestamp = date.getUTCTime();