以毫秒(UTC)获取当前日期(不使用字符串)

时间:2012-06-01 21:01:09

标签: javascript date utc milliseconds

嗯,你可能会认为这个问题已被提出,但我认为它没有。我读过的所有解决方案都有这个"拼图游戏"技术(如getUTCMonth() + getUTCMinutes + ...)。 但由于我只想比较两个UTC(!)日期之间的经过秒数,因此不适用。

众所周知,您可以通过以下方式获取当前(非UTC)日期:

var d = new Date();
var t_millis = d.getTime();

但这不是我想要的。我希望以毫秒为单位以UTC 表示当前系统日期,因此根本不要乱用字符串。变量t_millis的AFAIK将包含GMT中当前时间戳的毫秒值,而不是UTC。 (因为d也在GMT中。除非 getTime()执行一种隐式时区转换,即添加偏移 BEFORE 给出毫秒,但是我从来没有在任何地方读过这些内容)

除了将偏移量添加到时间值之外,还有其他方法吗? 我非常想念其他语言中的getUTCTimeMillis()函数。

5 个答案:

答案 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;
}
  • getTime函数返回自此以来经过的毫秒数 1970年1月1日00:00:00在客户端时区。
  • getTimezoneOffset返回客户端时区与UTC之间的分钟偏移量。
  • offset = offset * 60000;此操作以毫秒为单位转换分钟。
  • 减去偏移量得到自1以来经过的毫秒数 1970年1月00:00:00 UTC。

答案 4 :(得分:1)

要从UTC日期获取时间戳,您需要考虑该日期的时区和夏令时。例如,1月或7月的日期可能意味着1小时的差异。

以下选项就是这样。

Date.prototype.getUTCTime = function () {
    return this.getTime() - (this.getTimezoneOffset() * 60000);
};

可以用作:

var date = new Date();
var timestamp = date.getUTCTime();