Recientemente comencé a trabajar con KnockoutJs y rápidamente me di cuenta de que usando el valor predeterminado Json(myModelWithADate)
resultó en la codificación json predeterminada de \/Date(-62135578800000)\/
Investigué un poco cuatro formas posibles de manejar la visualización de mis fechas en elementos dom.Manejando fechas con Asp.Net MVC y KnockoutJS
1) Crear un enlace que se encarga de la conversión de la fecha de JSON para el formato que desee
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) {
}
};
Uso
<td data-bind="date: DueDate">
</td>
2) Retorno “cadenas” de su controlador
return Json(new {MyDate = DateTime.Now.ToShortDateString()});
3) Usar la JSON.NET para especificar un formato de Fecha Hora visto en más de james.newtonking.com
Ejemplo
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
4) utilizan JSON.parse para manejar sus fechas como se ve en este 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;
});
Todos parecen funcionar, pero todavía estoy luchando con cuál se siente "bien". En este momento, mi intestino va con una mezcla con las cuerdas de unión y de retorno. Como pude ver, extendí el enlace para manejar la entrada con los controles jQuery UI datepicker.
¿Existe una práctica aceptada cuando se manejan fechas de visualización u otros tipos como la moneda? ¿Hay alguna otra opción que me falta que resuelva este problema?
Uso cadenas en mis proyectos. El archivador modelo puede analizar una fecha de una cadena para que pueda redondear los valores de viaje fácilmente de esa manera. – Ryan
He publicado mi resultado de json net para el mismo problema, convierte la fecha en formato iso, por lo que es mucho más fácil trabajar con él. http://stackoverflow.com/questions/15778599/knockout-dates-being-reset-on-post-to-mvc-controller/15799992#15799992 – Kieran
El uso de momentjs es la mejor manera de lidiar con las fechas, ver mi respuesta a esto pregunta. –