Дата форматирования в шаблоне нокаута

Я хочу отформатировать дату в шаблоне нокаута. Дата в настоящее время возвращается как

2013-07-04T00:00:00

Мне бы хотелось, чтобы он отображался как

07/04/2013

Вот привязка, которую я использую

<td data-bind="text: FirstDate">

Являются ли их свойства форматирования по умолчанию в шаблоне нокаута?

Ответ 1

Нет ничего встроенного в форматирование даты или форматирование вообще в Knockout. Связывание text просто преобразует значение свойства в строку, поэтому, если вы хотите настроить форматирование, вам нужно сделать это самостоятельно.

Работа с датами в JavaScript не так проста, поэтому, вероятно, вам лучше использовать стороннюю библиотеку, например moment.js. Он очень прост в использовании, и он может форматировать даты с помощью метода format. Существует встроенный формат 'L' для требуемого формата месяца, дня месяца, года.

Вы можете использовать момент js в своей модели просмотра или непосредственно в вашей привязке, например:

<td data-bind="text: moment(FirstDate).format('L')">

Или вы можете создать собственный обработчик привязки, который инкапсулирует эту логику форматирования.

Примечание. Обязательно используйте () в свойстве FirstDate, если это выражение ko.observable внутри вашего выражения привязки данных, чтобы получить его значение.

Ответ 2

Я использую moment.js в модифицированной версии Расширитель даты Stephen Redd. Это выглядит так, что немного чище, чем вызов функции в привязке данных.

<input type="text" data-bind="value: dateOfBirth.formattedDate" />

Ответ 3

Вы также можете использовать MomentJs для создания расширителя:

ko.extenders.date = function (target, format) {
    return ko.computed({
        read: function () {
            var value = target();
            if (typeof value === "string") {
                value = new Date(value);
            }

            return moment(value).format("LL");
        },
        write: target
    });
}

ViewModel:

self.YourDate = ko.observable().extend({ date: true });

http://momentjs.com/docs/#/displaying/format/