2015-12-02 40 views
14

我正在使用datetimepicker.js及其date函數返回moment.js對象。它使用當地的UTC偏移量,而我的原始日期有不同的偏移量。從moment.js對象中刪除時區

我原來的日期:

2015-10-01T15:00:00.000Z 

我顯示的日期時間選擇器(DD-MM HH:mm)什麼:

01-10 15:00 

我得到什麼:

2015-10-01T15:40:00+01:00 

我想要什麼:

2015-10-01T15:40:00+00:00 

請注意我如何在最後刪除+01偏移量。

我該怎麼做這適用於任何本地UTC?這是,而不必手動刪除01(因爲它可以是任何其他本地偏移取決於用戶的位置)。

var momentDate = timePicker.data("DateTimePicker").date(); 
console.log(momentDate.format()); 
//this prints 2015-10-01T15:40:00+01:00 
+0

能否請您提供一些代碼或小提琴演示?這很簡單,但我不知道在這個datetimepicker控件中使用了哪些API。 –

回答

14

這聽起來像你正試圖讓用戶選擇一個基於UTC的日期和時間。因此,最好的辦法是讓選取器在創建時刻開始時以UTC模式運行。我不熟悉這個特殊的DateTimePicker,但假設某處內部它確實是這樣的:

var m = moment([year, month-1, day, hour, minute]); 

則應該改爲做到這一點:

var m = moment.utc([year, month-1, day, hour, minute]); 

(該此處顯示的變量會來)

理想情況下,選取器控件應該包含一個功能來設置UTC模式,以便當它告訴您時,它可以在內部執行此操作。

如果它沒有這樣的功能,你仍然可以補償自己。不幸的是,你不能只調用.utc(),因爲這會給用戶選擇的時間不同。所以,您必須通過將UTC時間移動原始時刻的偏移量來進行補償。

var m = // moment value from the picker 
var result = moment(m).utc().add(m.utcOffset(), 'm'); 

然後,您可以致電format或任何你想要的結果。請注意,原始時刻是克隆moment(m),使偏移不會丟失,切換到UTC不會干擾選取器的內部行爲。

另外,請注意轉移這樣一般是黑客行爲,如果做錯了會導致錯誤。這裏沒關係,因爲當應用調整時,時刻已經處於UTC模式。但作爲一個普遍的解決方案,應該避免轉移。最好的選擇是將控件置於UTC模式以開始。

+0

對我來說,只有當我使用'var result = moment(m).add(m.utcOffset(),'m')。utc();'。如果utc()在添加之前,utcOffset不會輸出任何東西 – TheFullResolution

+0

@TheFullResolution - 我想也許你做了'm.utc()。add ...'而不是'moment(m).utc()。add .. 。' –

+0

你是對的,我的錯 – TheFullResolution

12

您需要明確指定格式。

試試這個:

momentDate.format('YYYY-MM-DDTHH:mm:ss') 

這會給結果作爲

2015-10-01T15:40:00