Как конвертировать JSON DateTime в читаемую дату и время с помощью нокаута и пользовательских привязок
Я использую KnockoutJS с плагином отображения, и все работает хорошо, кроме поля DateTime, которое сериализуется как тики:/Date (x)/where x = ticks.
Как я:
1) Разбирайте объект даты в удобочитаемую форму?
2) Вернуть это из пользовательского привязки обратно в значение в модели?
Ответы
Ответ 1
Я ничего не знаю о KnockoutJS, поэтому может быть лучший способ сделать это уже встроенным. Я также ничего не знаю о втором вопросе. Надеюсь, кто-то, кто действительно что-то знает об этом, может вам помочь.
Итак, с этим отказом от ответственности, вот как вы можете конвертировать его с помощью "простого" JavaScript (возможно, вам придется включить Douglas Crockford json2.js если вы хотите поддерживать "старые" браузеры). JSON.parse
принимает необязательный аргумент reviver
, который может заменить каждое значение при его анализе.
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;
});
Ответ 2
Вот пример пользовательской привязки в knockoutjs. Он использует time.js для анализа даты
ko.bindingHandlers.date = {
update: function (element, valueAccessor) {
var value = valueAccessor();
var date = moment(value);
$(element).text(date.format("L"));
}
};
В вашем javascript вы можете использовать новое связывание, как и любое другое связывание нокаутом.
<td data-bind="date:Created" />
Ответ 3
Вот пример, если у вас есть функции в вашей viewmodel и привязка к вводу:
ko.bindingHandlers.date = {
update: function (element, valueAccessor) {
var value = valueAccessor();
var date = moment(value());
var strDate = date.format('YYYY-MM-DD');
$(element).val(strDate);
}
};
Ссылка на moment.js