2013-07-03 18 views
12

Chcę sformatować datę w szablonie nokautu. Data jest obecnie zwracane jakoFormatowanie daty w szablonie nokautu

2013-07-04T00:00:00 

Chciałbym to być wyświetlane jak

07/04/2013 

Oto wiążące Używam

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

Czy ich domyślne właściwości formatowania w szablonie Knockout?

+1

Nie ma nic zbudowany w Knockout dotyczące formatowania data lub formatowanie w ogóle . Trzeba użyć biblioteki stron trzecich, na przykład [moment.js] (http://momentjs.com/). – nemesv

+0

Dzięki @nemesv Zawarłem plik moment.js. . Dokładnie to, co chciałem. – rross

Odpowiedz

26

Nie ma nic wbudowanego w odniesieniu do formatowania daty lub formatowania w ogóle w Knockout. Powiązanie text po prostu przekształca wartość właściwości na ciąg znaków, więc jeśli chcesz niestandardowe formatowanie, musisz zrobić to sam.

Praca z datami nie jest tak łatwa w JavaScript, więc prawdopodobnie lepiej będzie użyć do tego biblioteki innej firmy, takiej jak moment.js. Jest bardzo prosty w użyciu i może formatować daty z format method. Jest zbudowany w formacie 'L' dla wymaganej liczby miesięcy, dnia miesiąca, roku formatowania.

Można użyć js moment w Pana zdaniem model lub bezpośrednio w wiązaniu jak:

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

Albo można utworzyć niestandardowy wiążącej obsługi, które hermetyzuje tę logikę formatowania.

Uwaga: Upewnij się, że używasz () dla swojej właściwości FirstDate, jeśli jest to ko.observable w wyrażeniu wiążącym dane, aby uzyskać jego wartość.

+0

Świetna odpowiedź :). –

+0

co jeśli chcemy również pokazać godziny i minuty? –

+0

@lola Dostępne opcje formatu są wymienione w dokumentacji moment.js: http://momentjs.com/docs/#/displaying/format/ – nemesv

2

Używam pliku moment.js w zmodyfikowanej wersji Stephen Redd's date extender. Wygląda na to, że jest trochę czystszy niż wywołanie funkcji w powiązaniu danych.

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

Można również użyć MomentJs stworzyć przedłużacz:

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/