2015-11-03 56 views
2

鉴于我有号码1446309338000,我该如何创建一个JavaScript UTC日期?如何将毫秒转换为JavaScript UTC日期?

new Date(1446309338000)将等于CST时间(中央标准)或当地时间。
new Date(Date.UTC(year, month, day, hour, minute, second))还没有此信息。

如果我这样做,JavaScript会改变时间吗?

new Date(1446309338000).ISOString(); 

它创建一个新的CST日期,然后将其转换为UTC?我真的只需要字符串。我从数据库中取出它(来自Azure Table存储数据库的RowKey)。

+1

日期对象已经是UTC。你是否想要将UTC,月份,日期,小时,分钟等等? – Nayuki

+0

作为参考,看看Date提供的方法:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date – Nayuki

+2

'new Date(1446309338000)'是你想要的,您只需访问UTC方法而不是本地时间方法。在_Console_中它显示在当地时间,因为'd.toString()'产生一个字符串的本地时间 –

回答

5

如果您的毫秒数已经是UTC日期。这基本上意味着世界时。现在,基于这些米利斯可以将Date对象转换成你喜欢的字符串:

 
new Date(1446309338000).toUTCString() // timezone free universal format 
> "Sat, 31 Oct 2015 16:35:38 GMT" 
new Date(1446309338000).toString() // browser local timezon string 
> "Sat Oct 31 2015 09:35:38 GMT-0700 (PDT)" 
new Date(1446309338000).toISOString() // ISO format of the UTC time 
> "2015-10-31T16:35:38.000Z" 

现在,如果由于某种原因(我看不出一个有效的原因,但只是为它赫克)你是在寻找具有不同的量,代表了不同的日期,但会打印相同的本地浏览器时区毫秒,你可以做到这一点的计算:

 
new Date(1446309338000 - new Date(1446309338000).getTimezoneOffset() * 60 * 1000)) 

现在的toString从原来的日期和toUTCString这个新的日期会一直读到时区信息,因为它们当然不是同一日期!

 
new Date(1446309338000).toString() 
> "Sat Oct 31 2015 09:35:38 GMT-0700 (PDT)" 
new Date(1446309338000 - new Date(1446309338000).getTimezoneOffset() * 60 * 1000).toUTCString() 
> "Sat, 31 Oct 2015 09:35:38 GMT" 
+0

那么这是做什么的:new Date(Date.UTC(year,month,day,hour,minute,second ))?这个(UTC)如何与其他构造函数不同? – markthegrea

+1

@markthegrea'new Date(millis)'是UTC格式,因为它是UTC 1970-01-01 midnight之后的毫秒数。而新日期(y,m,d,h,m,s)'将日期 - 时间组合解释为本地时间。所以'日期。UTC(y,m,d,h,m,s)将日期时间组合解释为UTC,并自1970年以来返回毫秒。 – Nayuki

0

好吧,如果日期字符串是你需要什么,希望这有助于:

new Date(1446309338000).toLocaleString('en-US', {timeZone: 'UTC'}) 

至于toISOString()而言,它返回使用ISO标准(该标准被称为ISO-8601和字符串表示格式是:YYYY-MM-DDTHH:mm:ss.sssZ)。 toLocaleString()是具有相同结果的人类可读格式。

0

它实际上是自制饼干一样简单,如果你有你的约会,说:

var date_in_milliseconds = 1504640419000; 


然后,您可以初始化一个新的日期如下:

var human_readable_date = new Date(0); //Date(0) creates a date at the Epoch, so Wed Dec 31 1969 

现在,只需将毫秒添加到Epoch中,这会给我们期望的日期:

human_readable_date.setUTCMilliseconds(date_in_milliseconds);