2017-03-17 65 views
0

日期顯示正確的日期我有存儲在我的UTC格式數據庫日期,並呼籲的JavaScript存儲爲UTC對服務器

element.createdDate = new Date(element.createdDate.toString()); 

結果顯示錯誤的日期。

調用

element.createdDate = new Date(element.createdDate.toUTCString()); 

回報什麼。我如何從UTC顯示正確的時間?

enter image description here

+0

您在這裏提供的信息不足以幫助我們。你說你在你的數據庫中有UTC的數據,但是你顯示的是一個JS'Date'對象。你是怎麼到達那裏的?什麼數據發送到您的JS代碼?你如何解析它以得到一個'Date'對象?另外,你的輸出顯然也是一個Date對象。這是你的預期嗎?如果不是,你期望輸出什麼? –

+0

此外,請確保您瞭解「Date」對象的工作原理 - 它在內部跟蹤UTC。其中一些函數保留在UTC(如'toUTCString'或'getUTCHours')中,一些函數轉換爲本地時間'(如'toString'或'getHours')。如果你只是'console.log'這個對象而不明確地調用一個發出字符串的函數,那麼這個實現是不確定的,並且在不同的瀏覽器中有所不同(有些會給出本地時間,有些給出UTC時間)。 –

+0

日期是從角度/內核中建立的日期。元素只是forEach循環的每次迭代,而createdDate是存儲在mongo中的UTC日期。生病添加了全功能的圖片 – mrusername

回答

-1

嘗試用日期格式/此刻他們會幫助你。它們很容易使用

+0

請僅使用* Post answer *按鈕才能得到實際答案。一旦你有[足夠的代表](https://stackoverflow.com/help/privileges/comment),你就可以添加評論的問題。 –

1

看起來你的json響應包含一個字符串值,它是以UTC格式的ISO8601格式,然後你要從它們創建Date對象。

你的這部分代碼是罰款:

if (element.createdDate) element.createdDate = new Date(element.createdDate.toString()); 
  • 您解析字符串,並將得到Date對象是正確的。
  • 但是,這裏不需要使用.toString(),因爲該值已經是一個字符串。這是多餘的。

你的這部分代碼的問題是:

console.log("javascript date: " + new Date(element.depositDate.getUTCDate().toString())); 
  • getUTCDate函數返回月份的只是日期。不要使用它。
  • 無論您如何創建Date對象,最終都會創建一個Date對象,並且您依賴於隱式字符串轉換來輸出它。這在不同的瀏覽器中會有不同的行爲。

考慮console.log(new Date())

  • 在Chrome中,這個記錄類似Fri Mar 17 2017 12:14:29 GMT-0700 (Pacific Daylight Time)我的電腦上。這就好像我調用console.log(new Date().toString());它採用RFC 2822格式(但不完全),並且在本地時間表示。

  • 在Firefox中,這個日誌類似2017-03-17T19:14:46.535Z。這就好像我叫console.log(new Date().toISOString());它是ISO8601格式,用UTC表示。

問題是,不要依賴隱式的未定義行爲。如果您必須使用Date對象,則應該使用console.log(element.createdDate.toISOString())來查看UTC時間的ISO8601表示形式。

如果你打算用日期和時間做很多事情,你可能更喜歡使用一個庫,例如Moment.js,它可以使這樣的任務更清晰。

+0

如果它是從數據庫返回的字符串值,那麼調用'getUTCDate()'應該失敗,不會返回月份的日期... –

+0

這是真的。此外,它不會使圖片中顯示的輸出,所以我認爲OP必須根據他在[早先的屏幕截圖]中顯示的代碼(https://i.stack.imgur.com/ vgUjT.png),然後在編輯中將其刪除。 –

0

我有存儲在我的UTC格式數據庫日期,並呼籲

element.createdDate = new Date(element.createdDate.toString()); 

結果顯示錯誤的日期。

2016-10-11T00:00:00ZMon Oct 10 2016 20:00:00 GMT-04:00 (EDT)在時間上是完全相同的。唯一的區別是,一個以ISO 8601擴展格式顯示,時區偏移量爲00:00,另一個以RFC 2822(like)格式顯示,時區偏移量爲-04:00(並假設EDT區域爲局部區域)。

調用

element.createdDate = new Date(element.createdDate.toUTCString()); 

回報什麼。

這是不尋常的。通常它會返回一個字符串或一個錯誤,但沒有一個工作示例或任何代碼來提供上下文,所以不可能說出原因。

如何從UTC顯示正確的時間?

您尚未指定「正確」是什麼。您在同一時刻顯示日期和時間,只是以不同的格式和時區顯示。

相關問題