2013-05-11 126 views
1

我從我的MVC控制器中獲得一個JSON對象數組,並且這些對象有一些我要解析和格式化的日期字段。Moment JS解析整個JSON數組和格式化多個日期實例

我已經取代了默認MVC JSON串行器與優秀Newtonsoft.Json庫,所以我的日期已經相當很好地格式化,然後回來是這樣的:

"SystemDate": "2013-05-06T17:19:40.443", 
"LocalDate": "2013-05-06T18:19:40", 

我使用Moment.js上客戶端爲我的日期處理,我一直在尋找一個整潔的解決方案,以進一步格式化這些日期在UI中顯示。

我即將開始編寫一個自定義函數,該函數將採用日期格式和日期模式的對象的JSON數組以及要格式化的字段名稱數組。

函數簽名看起來是這樣的:

function formatDates(dataArray, pattern, fields) { /code/ }; 

dataArray中會是這樣的:

[{"name": Jammer, 
    "SystemDate": "2013-05-06T17:19:40.443", 
    "LocalDate": "2013-05-06T18:19:40" 
}, 
{another object} 
{another object} 
{another object} 
] 

模式將是這樣的:

"dddd, MMMM Do YYYY, h:mm:ss a" 

字段列表會(使用上面的示例對象):

[{"SystemDate"}, {"LocalDate"}] 

我剛剛開始使用Moment.js,所以我不是特別熟悉它自己的API,但從looking at the docs沒有任何暗示這種功能已經存在於它的代碼庫中的東西。

在我關閉一個工具之前,我想知道Moment.js中是否已經有一些東西可以處理這個問題了?或者關於如何最好地實現這個功能的指針?

回答

0

這不是我期望的日期操作庫的那種。真正由您來解碼您的數據,執行迭代以查找日期,然後使用時刻來完成日期定位,最後,將數據重新編碼爲您需要的表單。這就是說,看看你想要的東西似乎是一項非常微不足道的任務。

像這樣的東西應該爲你做

的JavaScript

var jsonString = '[{"name":"Jammer0","SystemDate":"2013-05-06T17:19:40.443","LocalDate":"2013-05-06T18:19:40"},{"name":"Jammer1","SystemDate":"2013-05-06T17:19:40.443","LocalDate":"2013-05-06T18:19:40"},{"name":"Jammer2","SystemDate":"2013-05-06T17:19:40.443","LocalDate":"2013-05-06T18:19:40"},{"name":"Jammer3","SystemDate":"2013-05-06T17:19:40.443","LocalDate":"2013-05-06T18:19:40"}]'; 

var formatted = JSON.stringify(JSON.parse(jsonString).map(function (record) { 
    var requiredPattern = "dddd, MMMM Do YYYY, h:mm:ss a"; 

    record.SystemDate = moment(record.SystemDate).format(requiredPattern); 
    record.LocalDate = moment(record.LocalDate).format(requiredPattern); 

    return record; 
})); 

console.log(formatted); 

jsfiddle

+0

的的jsfiddle例如沒有出現在目前的工作。 – Jammer 2013-05-11 12:30:27

+0

我試着將此代碼添加到我的代碼中,它會生成一個腳本錯誤「SyntaxError:JSON.parse:unexpected character」 – Jammer 2013-05-11 12:47:53

+0

jsFiddle真的壞了。即使將moment.min.js引用爲外部資源,它也不會正常工作。 – Jammer 2013-05-11 14:18:37