2013-11-04 98 views
3

我有一個時間對象,我需要應用時區,但不更改小時或分鐘字段的值。例如,如果我的時刻包含日期'2013-10-10T15:00:00 + 00:00',我希望能夠將區域更改爲'America/Los_Angeles',以便當我打印獲得'2013 -10-10T15:00:00-07:00'保留時間字段,但用moment.js更改時區

(對於那些你熟悉的約達功能withZoneRetainFields()後我)

這裏是一個jsfiddle的基本設置,顯示問題。我怎樣才能改變最後一個項目,使它產生所需的輸出?

+0

我不確定爲什麼你想讓它從15:00移到16:00。這是一個錯字嗎?如果您只是在尋找一種方法來構建已經在該時區中的時間,請參閱我對類似問題的回答[此處](http://stackoverflow.com/a/19735888/634824) –

+0

對於錯誤的道歉,是的,它應該是15:00而不是16:00。我已經更新了這個問題,並更新了小提琴以提供一個潛在的解決方案。鑑於您提到的變更尚未發佈,您是否會推薦此作爲在此期間執行此操作的最佳方式? – jgm

回答

1

我建議尋找時間timezone.js庫來管理時區。它提供了一個有趣的.zone()函數來處理時間日期對象上的時區。

我將在moment.js的GitHub的問題鏈接到培訓相關問題:

Switching timezone of moment without changing the values

但是請注意,我不建議這樣做,你也可以手動調整日期所需時區。在下面的示例中,我在客戶端的時區中創建日期,將日期對象上的時區更改爲UTC,然後修復日期的值,以使小時和分鐘保持相同的值。

// Takes a moment.js date object, and converts 
// it to UTC timezone, while maintaining the 
// selected hour/mins of the input date. 
function convertDateToUTC (date){ 

    // Current timezone's offset. Minutes offset from UTC 
    var offset = date.utcOffset(); 

    // Convert selected date to UTC 
    date = date.utc(); 

    // Adjust the time to. 
    date.add(offset, "minutes"); 

    return date; 
};