2016-09-27 70 views
5

我目前正在使用Moment js來解析日期和時間的ISO 8601字符串,但它不能正常工作。我究竟做錯了什麼?我還會採取其他更簡單的解決方案。如何使用Javascript中的Moment js將ISO 8601解析爲日期和時間格式?

的ISO 8601,我想解析:"2011-04-11T10:20:30Z"爲日期字符串:"2011-04-11"和時間字符串:"10:20:30"

並試圖console.log(moment("2011-04-11T10:20:30Z" ,moment.ISO_8601))console.log(moment("2011-04-11T10:20:30Z" , ["YYYY",moment.ISO_8601])的測試,但它只是返回一個對象與所有不同類型的屬性。

+0

隨着字符串操作:'str.slice(0,-1).split( 'T');' – Xotic750

回答

10

隨着moment.js

var str = '2011-04-11T10:20:30Z'; 
 
var date = moment(str); 
 
var dateComponent = date.utc().format('YYYY-MM-DD'); 
 
var timeComponent = date.utc().format('HH:mm:ss'); 
 
console.log(dateComponent); 
 
console.log(timeComponent);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.1/moment.min.js"></script>

或者簡單地用字符串操作

var str = '2011-04-11T10:20:30Z'; 
 
var parts = str.slice(0, -1).split('T'); 
 
var dateComponent = parts[0]; 
 
var timeComponent = parts[1]; 
 
console.log(dateComponent); 
 
console.log(timeComponent);

+0

你真了不起!正是我在找什麼!非常感謝。接受了答案,並upvoted。只是一個簡單的問題,dateComponent和timeComponent都是字符串類型嗎? – Walter

+0

在這兩個例子中,它們都是「字符串」的類型。 – Xotic750

+0

正是我所期待的。再次感謝Xotic750。酷配置文件圖片btw;) – Walter

9

當前操作有兩部分:讀取日期/時間,並將其吐出。你已經有了第一部分:

moment("2011-04-11T10:20:30Z") 

但你需要調用的輸出功能,如:

moment("2011-04-11T10:20:30Z").format('YYYY-MM-DD h:mm:ss a') 
+0

謝謝你的響應。目前它是控制檯日誌記錄:'2011-04-11 3:20:30 am'。所以日期是正確的,但時間不對。難道不應該是...... mm:ss?嘗試它,但仍然是03而不是10。 – Walter

+0

你可以在這裏找到所有格式化模式的完整分類:http://momentjs.com/docs/#/displaying/。但是,我不認爲時間是格式問題。我很確定這是一個時區問題。你的初始日期字符串缺少時區位,所以Moment決定將其解釋爲某個時區(我猜0 GMT),然後顯示相對於你當前時區的時間(我猜你住的是+/- 7來自GMT?)。您需要閱讀關於時區的Moment文檔(或者可能會提出一個單獨的問題)來解決此問題。 – machineghost

+0

作爲一個側面說明,時區是關於Moment最煩人的事情之一,我經常希望他們會對他們進行審查......但最終作爲Web開發人員我很高興他們沒有。您的某些用戶幾乎肯定會在您所在的時區使用您的網站,因此重要的是要考慮如何在服務器上存儲日期,以及當您向用戶顯示日期時如何將JS/Moment代碼本地化。 – machineghost

相關問題