2016-07-23 83 views
0

我在客戶端從.NET上放置了UTC .NET/JSON日期。當我運行以下命令:轉換時刻UTC到當地日期時間

moment(value.Planet.when).utc() 

返回從Web服務日期:

"/Date(1469271646000)/" 

我得到的_D參數顯示當前準確的UTC日期與GMT + 0300上右側的日期。

我想將此時間轉換爲用戶機器上的本地時間,以及我所做的事情,我總是將時間縮短3個小時。

我這樣做:

moment(value.Planet.when).local().format('YYYY-MM-DD HH:mm:ss') 

,我也得到了相同的日期時間作爲UTC。我不明白我怎麼能得到相對於當地時間的UTC時間。我檢查了那個momentjs對象的確是UTC。

我認爲,如果我通過moment.utc()函數從web服務(最初來自數據庫)獲取UTC日期,我可以運行local()函數,我會得到準確的時間相對於我的區域,但它不起作用。

回答

0

請勿使用_d屬性。它僅供內部使用。見this answer,the user guideMaggie's blog post on the subject

至於你如何轉換爲本地時間的問題,你根本不需要轉換。你已經解析以本地模式的輸入值,所以你可以直接使用它:除非他們通過一些其他控件或庫,你正在使用需要

var m = moment("/Date(1469271646000)/"); // gives you a moment object in local mode. 
var s = m.format(); // lets you format it as a string. Pass parameters if you like. 
var d = m.toDate(); // gives you a Date object if you really need one 

儘量避免使用Date對象。大多數操作都可以在moment對象上嚴格執行。

+0

我只是把一個新的記錄,我得到太陽七月24 2016 02:24:15 GMT + 0300如果我使用你的代碼,但我當地的時間是5:24而不是2:24。該web服務返回「/日期(1469316255000)/」 - 所以我做錯了。 –

+0

時間戳「1469316255000」對應於「2016-07-23T23:24:15.000Z」。您可以在純JS或許多網站上查看,如[epochconverter.com](http://www.epochconverter.com)。您的輸出會在三個小時後顯示,因爲您的本地時區偏移值爲「+03:00」。如果你預計它甚至比這還多三個小時,那麼我會說你的web服務發送了錯誤的數據。也許你是雙重糾正。 –

+2

例如,假設您的後端是.NET,如果您在數據庫中有基於UTC的值,但在檢索它們時不使用DateTimeKind.Utc(使用DateTime.SpecifyKind),那麼它們將具有' DateTimeKind.Unspecified'默認情況下。 ASP.Net將在序列化期間將這些視爲*本地時間*,並將減去服務器的本地時區偏移量。 –

相關問題