J'ai récemment commencé à travailler avec KnockoutJs et rapidement réalisé à l'aide de la valeur par défaut Json(myModelWithADate)
a entraîné le défaut encodage json de \/Date(-62135578800000)\/
Avec un peu de recherche, j'ai trouve quatre façons de gérer l'affichage de mes dates dans les éléments du dom.
1) Créer une liaison qui assure la conversion de l'Json date pour le format que vous désirez
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) {
}
};
L'utilisation de la
<td data-bind="date: DueDate">
</td>
2) le Retour de "cordes" à partir de votre Contrôleur
return Json(new {MyDate = DateTime.Now.ToShortDateString()});
3) Utiliser le JSON.NET pour spécifier un format de Date / Heure vu à james.newtonking.com
Exemple
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
4) l'utilisation de JSON.analyser pour gérer vos dates comme on le voit dans cette stackoverflow réponse.
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;
});
Ils semblent tous fonctionner, mais j'ai encore de la difficulté avec laquelle on se sent "à droite". Droit maintenant, mon intestin est d'aller avec un mélange avec de la liaison et le retour de chaînes. Comme j'ai pu le voir moi-même l'extension de la liaison à la poignée d'entrée avec jQuery UI datepicker contrôles.
Est-il une pratique acceptée lors de la manipulation de l'affichage des dates ou d'autres types tels que la monnaie? Est-il une autre option, je suis absent qui permet de résoudre ce problème?