2016-06-21 65 views
2

我有2016-06-21T10:00:00-07:00格式的日期和時間,代表06/21/2016 5PM在PST中,我只想將其更改爲美國東部時間2016年6月21日下午5點,反之亦然。我該如何與時刻做到這一點?如何在不修改時間的情況下僅更改時區

JSFiddle

debugger; 
var dateTime = moment('2016-06-21T10:00:00-07:00'); 
var newDateTime = dateTime.clone(); 
    newDateTime.tz('US/Eastern'); 
//dateTime = dateTime.utc(); 
    console.log(dateTime.utcOffset()); 

    console.log(newDateTime.utcOffset()); 
    console.log(newDateTime.utcOffset() - dateTime.utcOffset()); 
       //console.log(utc.format()); 
    dateTime =   dateTime.add(newDateTime.utcOffset(), 'minutes'); 
console.log(dateTime.format()); 
console.log(new Date(Date.parse(dateTime.format())).toJSON()); 

編輯:

給定的輸入= 2016-06-21T08:00:00-07:00(PST)

預期輸出= 2016-06- 21T08:00:00-04:00(EST)

所以當我將它轉換爲UTC時,它應該變成

2016-06-22T15:00:00Z爲PST 2016-06-22T12:00:00Z爲EST

回答

2

我認爲你對ISO8601格式的工作原理感到困惑。此格式始終表示具有時區偏移的本地時間。因此,2016-06-21T10:00:00-07:00代表2016年6月21日上午10點在當前UTC-7的時區(這可能是美國太平洋等等)。

這聽起來像你想要在當地時間,但把它放在一個新的時區。這就爲你打開一個有趣的問題,說明你爲什麼以你的格式接收日期。如果日期意圖被解釋爲全球時間表上的確切點,那麼您接收它的格式是好的。但是,如果日期意味着被解釋爲本地時間(不是相對於UTC),那麼可能值得考慮日期格式需要在源處更改的可能性。例如,如果您向API發出ajax請求,並且它以此格式返回日期,但該日期實際上與UTC沒有任何關係,那麼嘗試更改該API以僅發送本地時間(沒有偏移量)。如果你能做到這一點,那麼,下面的代碼將工作:

moment.tz('2016-06-21T10:00:00', 'America/New_York').format() 
"2016-06-21T10:00:00-04:00" 

如果無法做到這一點,或者如果日期是指被解釋爲對全球時間軸一個確切的點,但你希望在你的特定用例中忽略這一點,這是可以做到的。您需要指定一個分析格式,以忽略初始時間戳中的時區偏移量。該代碼將如下所示:

moment.tz('2016-06-21T10:00:00-07:00', 'YYYY-MM-DDTHH:mm:ss', 'America/New_York').format() 
"2016-06-21T10:00:00-04:00" 

你可能會從材料中獲益this blog post,因爲它涉及的格式ISO8601如何工作,以及如何所有的時刻的構造函數工作。

+0

這就是我要找的,謝謝。 – user1614862

+0

我無法刪除偏移量,但我也有UTC格式的同一時間。所以,我總共有三個輸入,其中一個是dateTime,帶有UTC和目標時區的偏移量和日期時間。 – user1614862

0

結帳moment().utcOffset()您可以在抵消作爲參數傳遞給這個函數傳遞和日期將使用該語言環境。

假設您事先知道需要的utcOffsets,在您的情況下是-420和-240或-300(帶有DayLightSaving的EST)。下面可以做

var dateTime = moment('2016-06-21T10:00:00-07:00'); 
dateTime.utcOffset(-420).format(); 
"2016-06-21T10:00:00-07:00" 
dateTime.utcOffset(-240).format() 
"2016-06-21T13:00:00-04:00" 

注:With -04:00, it should 13:00:00 and not 07:00:00 - http://www.timeanddate.com/time/zones/est

編輯:這個答案被張貼了問題,其中需要在不同的時區同時的早期版本。如果不正確,請詳細說明它是如何發生的。 謝謝!

+0

我編輯了我的問題與預期的輸入和輸出。 – user1614862

+0

從不特殊情況時區轉換。由於政府經常更改時區規則,因此不能保證今天運行的代碼將在明天工作。使用時區庫來處理這個問題。有關時區更改頻率的更多信息,請參閱http://codeofmatt.com/2016/04/23/on-the-timing-of-time-zone-changes/ –

+0

我仍然收到不良結果。 @Maggie Pint,我已經在使用這個目的了。 – user1614862

相關問題