2015-11-03 117 views
0

我試圖將Dropbox API date format轉換爲日期一。在moment.js中,moment.utc在IE和Safari中不起作用

現在它不能以以下格式工作。

moment.utc("Sat, 21 Aug 2010 22:31:20 +0000") 

它在使用,如果使用UTC日期之前轉換格式如下工作:

moment.utc(new Date("Sat, 21 Aug 2010 22:31:20 +0000")) 

但是,我不能用新日期的方法,因爲它不能在其他一些情況下可使用(字符串不標準化) - 相關Stackoverflow問題。

一種可能的方式是配置Dropbox輸入格式,有沒有其他方法讓moment.utc工作而不使用新的Date方法?

非常感謝!

回答

0
var d = moment.utc("20100821", "YYYYMMDD"); 
var day = d.day(); // 6 
var year = d.year(); // 2010 
var month = d.month(); // 7 
var date = d.date(); // 21 
0

Moments.js發出一個大胖子在你的代碼棄用警告。問題的要點是:如果你沒有提供明確的日期格式,並且你的日期格式不是ISO 8061的外觀,那麼moment.js會放棄解析它並依賴新的Date()代替。最好是脆的。

解決方法很簡單:您知道 Dropbox用於返回您的日期的格式。只需指定它並解決您的問題。喜歡的東西(實際格式可能需要一些調整)

var value = moment.utc("Sat, 21 Aug 2010 22:31:20 +0000", "ddd, d MMM YYYY HH:mm:ss Z"); 
+0

但是,我也需要用相同的代碼來處理其他格式的日期。所以在我的情況下,我不能簡單地在那裏添加Dropbox格式。 –

+0

我只是嘗試另一種方式來做到這一點。 var value = moment(「Sat,21 Aug 2010 22:31:20 +0000」)。utc();它似乎工作!你怎麼看呢? @保羅 - 揚 –

0

Moment.js官方文檔,它說:

時刻(字符串);

從字符串創建時刻,我們首先檢查字符串是否匹配已知的ISO 8601格式,如果找不到已知的格式,則返回新的Date(字符串)。

因此,爲了去各地新日期陷阱和也適用ISO 8061.我可以先申請moment(),然後應用utc()

moment("Sat, 21 Aug 2010 22:31:20 +0000").utc() 

在這種情況下,雖然輸入字符串未格式化爲相同(但都遵循ISO 8061),他們仍然可以被安全地處理。