I recently started working with KnockoutJs and quickly realized using the default Json(myModelWithADate)
resulted in the default json encoding of /Date(-62135578800000)/
With a bit of research I located four potential ways to handle the display of my dates in dom elements.
1) Create a binding that handles the conversion from the Json date to the format you desire
ko.bindingHandlers.date = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var jsonDate = valueAccessor();
var value = new Date(parseInt(jsonDate.substr(6)));
var ret = value.getMonth() + 1 + "/" + value.getDate() + "/" + value.getFullYear();
element.innerHTML = ret;
},
update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
}
};
Usage
<td data-bind="date: DueDate">
</td>
2) Return “strings” from your Controller
return Json(new {MyDate = DateTime.Now.ToShortDateString()});
3) Use the JSON.NET to specify a Date Time format seen over at james.newtonking.com
Example
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
4) use JSON.parse to handle your dates as seen in this stackoverflow answer.
JSON.parse(jsonText, function(key, value) {
// Check for the /Date(x)/ pattern
var match = //Date((d+))//.exec(value);
if (match) {
var date = new Date(+match[1]); // Convert the ticks to a Date object
return humanReadable(date); // Format the date how you want it
}
// Not a date, so return the original value
return value;
});
They all appear to work, but I am still struggling with which one feels “right”. Right now my gut is going with a mix with the binding and returning strings. As I could see myself extending the binding to handle input with jQuery UI datepicker controls.
Is there an accepted practice when handling displaying dates or other types such as currency? Is there another option I am missing that solves this problem?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…