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日.)
怎么样:
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)
我用这个函数来解决问题.
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)