2017-06-21 34 views
0

我很難很快採用UTC日期字符串和偏移量,並準確地將時間調整爲用戶本地時間。我在我們的服務器上收到一個日期:2017-06-21T20:26:28.744Z,我需要把它變成發件人當地時間的時間戳。爲了這個例子,可以說偏移量是6個小時。本地時間格式化發件人的日期

我知道這可能是錯誤的,z部分解釋了什麼是抵消真的是

我需要使用時刻將2017-06-21T20:26:28.744Z轉換爲2017-06-21T14:26:28

這樣做似乎給了我字符串的UTC部分和砍掉偏移量。我需要使用偏移調節小時/分鐘回

moment 
    .utc('2017-06-21T20:26:28.744Z') 
    .local() 
    .format('YYYY-MM-DDTHH:mm:ss') 
    // 2017-06-21T20:26:28" 
    // I need 2017-06-21T14:26:28 
+0

'moment.utc('2017-06-21T20:26:28.744Z')。local()。format('YYYY-MM-DDTHH:mm:ss')'? –

+0

試過了。我實際上會更新,以示例 –

+0

您的代碼看起來很好,它會在我的環境中顯示「2017-06-21T22:26:28」(歐洲/羅馬時區UTC + 2)是正確的輸出。 – VincenzoC

回答

0

您可以使用utcOffset

設置UTC通過提供分鐘偏差。請注意,一旦您設置了偏移量,它就是固定的,並且不會自行更改(即沒有DST規則)。如果你想要一個實際的時區 - 特定位置的時間,如America/Los_Angeles,請考慮moment-timezone

如果輸入小於16並且大於-16,它會將輸入解釋爲小時。

這裏工作示例:

console.log(moment 
 
    .utc('2017-06-21T20:26:28.744Z') 
 
    .utcOffset(-6) 
 
    .format('YYYY-MM-DDTHH:mm:ss'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

如果你想使用的時刻,時區,你可以使用tz()方法:

console.log(moment 
 
    .utc('2017-06-21T20:26:28.744Z') 
 
    .tz('America/Chicago') 
 
    .format('YYYY-MM-DDTHH:mm:ss'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data-2012-2022.min.js"></script>

+0

這更接近我想要的,但我不想硬編碼偏移量或時區。服務器在AWS中運行,可能在任何地方。據我所知,時間戳的結尾是偏移量。我只需要學習如何提取這些數據,然後我就可以使用它來向後/向前移動時間 –

+0

偏移量通常是一個值,用UTC來表示差異(例如'+02:00','-06:00 ',...)。您的輸入以'Z'結尾,這意味着您的值是UTC('+00:00'偏移量)。我不清楚你想使用哪種標準_「將時間向後/向前移動」_。 – VincenzoC

+0

當我這樣做時,我對日期有了一個可怕的理解。我沒有意識到z之前的數字是毫秒。Duh我知道,我認爲這是我對utc的偏移量的一些計算。我能夠完成這件事。謝謝你們的時間!對於記錄你的答案沒有錯,我會upvote它,但我不想讓它看起來像我的理解是正確的 –