2016-07-30 116 views
2

我已存儲的值在SQLServer的DB在UTC是2016-07-28 16:00:00.000如何將UTC +偏移日期轉換爲本地?

enter image description here

我已經完成轉換的UTC日期時間字符串在Javascript中的字符串ISO然後傳遞該值到一個時刻,並呼籲toDate()在上面。

但是輸出的值仍然是UTC,包括偏移量。

因此,我通過兩個分配的結果臺階,發現下面的值在每個階段:

第一分配:(UTC值下午4:15形式DB轉換爲ISOString)

var isoDate = new Date('7/28/2016 4:15:00 PM').toISOString(); 

output value: "2016-07-28T15:15:00.000Z" 

第二次分配:(作爲輸出UTC加上偏移,而不是預期的17:15本地)

var localOutageStart = moment.utc(isoDate).toDate(); 

output value: Thu Jul 28 2016 16:15:00 GMT+0100 (GMT Daylight Time) 

相反,我想通過使用偏移輸出在當地的價值,所以它禾uld在本地輸出此值:

desired output value: 28 07 2016 17:15:00 

我該如何輸出本地時間而不是UTC加偏移量? 我將結果傳遞給Bootstrap datetime picker,我認爲這需要一些時間值。

+0

你的第二個例子已經爲本地時間,而不是UTC時間。這也有助於瞭解您是否在查找結果中的字符串,日期對象或時刻對象,以及您正在使用的語言環境和時區。 –

+0

'16:15'已經是當地時間。 UTC是'15:15'。你爲什麼要再次總結1h? – Oriol

+0

另外,第一個例子中的* input *也已經在當地時間 - 所以......你真正想要完成什麼?你只是在時刻對象上尋找'.local()'?在.utc().local()。utc().local()'...你可以這樣整天...... :) –

回答

2

如果2016-07-28 16:00:00.000使用UTC,那麼您需要將其視爲同等對待。作爲ISO8601,它應該是2016-07-28T16:00:00.000Z。你可以像這樣與時刻得到這樣的:

var i = "2016-07-28 16:00:00.000"; 
var s = moment.utc(i).toISOString(); 

或者沒有了,像這樣:當你想用它在客戶端上"2016-07-28T16:00:00.000Z"

然後:

var i = "2016-07-28 16:00:00.000"; 
var s = new Date(i + " UTC").toISOString(); // yes, a non-standard hack, but works. 

這將創建字符串方:

var i = "2016-07-28T16:00:00.000Z"; 
var m = moment(i); // here's a moment object you can use with your picker 
var d = m.toDate(); // or, if you want a Date object 

// or, if you want to custom format a string 
var s = m.format("DD MM YYYY HH:mm:ss"); 

或者,如果你想單獨使用Date對象做到這一點:

var i = "2016-07-28T16:00:00.000Z"; 
var d = new Date(i); 

(可定製格式化是比較困難的時刻沒有)

+2

+1爲瀏覽器的關鍵部分接收沒有時區的字符串,因此被解釋爲在本地時區。 – kwah

+0

不錯,我認爲這裏引起混亂的主要原因是@kwah提到傳入的服務器日期字符串沒有指定時區。 –

+0

當格式化時,我注意到一件令人討厭的事情,它失去了微小的精度,例如,如果我在調用後讀取ISO字符串值爲4:10 PM.format(「MM/DD/YYYY HH:MM」) ;該時刻的分鐘值減去3.我沒有在這裏發佈一個問題,因爲沒有看到任何類似的問題之前提出 - http://stackoverflow.com/questions/38679715/how-to-resolve-loss-of -minute-precision-formatting-a-moment-in-12hr –

相關問題