2013-07-03 4 views
12

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

2013-07-04T00:00:00 

Я хотел бы, чтобы это будет отображаться как

07/04/2013 

Вот связыванием я использую

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

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

+1

Там нет ничего встроенный Нокаут относительно форматирования даты или форматирования в целом , Для этого вам нужно использовать библиотеку thrid party, такую ​​как [moment.js] (http://momentjs.com/). – nemesv

+0

Спасибо @nemesv Я включил moment.js. . Это именно то, что я хотел. – rross

ответ

26

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

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

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

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

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

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

+0

Отличный ответ :). –

+0

Что делать, если мы также хотим показать часы и минуты? –

+0

@lola доступные параметры формата перечислены в документации момента. Js: http://momentjs.com/docs/#/displaying/format/ – nemesv

2

Я использую moment.js в модифицированной версии Stephen Redd's date extender. Похоже на это, что немного чище, чем вызов функции в привязке данных.

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

Вы также можете использовать 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/

Смежные вопросы