2015-11-03 119 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);