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

syn*_*ror 16 javascript date utc milliseconds

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

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

var d = new Date();
var t_millis = d.getTime();
Run Code Online (Sandbox Code Playgroud)

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

那么除了将偏移量添加到时间值之外真的没别的办法吗?我拼命地错过了getUTCTimeMillis()其他语言中已知的功能.

adv*_*ncd 34

这是一个老问题,但为了新访客的缘故,这里是正确答案:

Date.now();
Run Code Online (Sandbox Code Playgroud)

它返回自1970年1月1日00:00:00 UTC以来经过的毫秒数


Poi*_*nty 19

无论您的时区如何,时间的毫秒值都将相同.也就是说,地球上没有时区彼此相差大于零的毫秒数.(它们可能相差整数小时甚至几分钟,但不是秒或毫秒.)

也就是说,您从中获取的值getTime() UTC相对时间戳.如果地球上广泛不同位置的两个Web浏览器同时创建一个Date对象,它们都将获得相同的值.getTime()(假设时钟是同步的,这当然是不太可能的).

这里:1338585185539这是我刚从浏览器中获取的时间戳.我现在在德克萨斯州的奥斯汀,现在是下午4点13分(因此时间戳将在此之前略有增加).将其插入计算机上的Date实例并查看其内容.

(编辑 - 为了后人的缘故,时间戳是2012年6月1日.)


kir*_*pit 7

怎么样:

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())
Run Code Online (Sandbox Code Playgroud)


Bla*_*net 5

我用这个函数来解决问题.

function getUTCNow()
{
    var now = new Date();
    var time = now.getTime();
    var offset = now.getTimezoneOffset();
    offset = offset * 60000;
    return time - offset;
}
Run Code Online (Sandbox Code Playgroud)
  • getTime函数返回自客户端时区1970年1月1日00:00:00以来经过的毫秒数.
  • getTimezoneOffset以客户端时区和UTC之间的分钟数返回偏移量.
  • offset = offset*60000; 此操作以毫秒为单位转换分钟.
  • 减去偏移量得到自1970年1月1日00:00:00 UTC以来经过的毫秒数.

  • 我不认为这是正确的。根据 [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime):`getTime() 总是使用 UTC 表示时间。例如,一个时区的客户端浏览器,getTime() 将与任何其他时区的客户端浏览器相同。`。此外,他们说返回值是“一个数字,表示 1970 年 1 月 1 日 00:00:00 UTC 和给定日期之间经过的毫秒数。”**不是**客户端时区中的毫秒数。 (2认同)