Я недавно начал работать с KnockoutJs и быстро понял, что использование по умолчанию Json(myModelWithADate)
привело к кодировке json по умолчанию \/Date(-62135578800000)\/
После небольшого исследования я нашел четыре возможных способа обработки отображения моих дат в элементах dom.
1) Создайте привязку, которая обрабатывает преобразование даты Json в желаемый формат
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) {
}
};
Использование
<td data-bind="date: DueDate">
</td>
2) Вернуть «строки» из вашего контроллера
return Json(new {MyDate = DateTime.Now.ToShortDateString()});
3) Используйте JSON.NET, чтобы указать формат даты и времени, который можно увидеть по адресу james.newtonking.com
Пример
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
4) используйте JSON.parse для обработки ваших дат, как показано в этом ответе stackoverflow.
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;
});
Кажется, все они работают, но я все еще борюсь с тем, кто чувствует себя "правильным". Прямо сейчас мой кишечник идет со смесью со связывающими и возвращающими строками. Как я мог видеть, я расширяю привязку для обработки ввода с помощью элементов управления DatePicker пользовательского интерфейса jQuery.
Есть ли общепринятая практика при обработке отображения дат или других типов, таких как валюта? Есть ли другой вариант, который мне не хватает, чтобы решить эту проблему?