2013-05-08 8 views
5

Mam tablicę, jeden klucz to createDate. W pętli foreach tablicy, ciągnę wartość createDate poprzez powiązanie tekstu knockout.nokaut - jak wiązać tylko datę

<span data-bind="text: createDate"></span> 

Wartość wyświetla: "2013-04-24T16: 29: 00.38" ... tak jest w bazie danych. Czy istnieje sposób formatowania (w obrębie powiązania), aby wyświetlić tylko datę? Czy muszę go zapisać jako datę tylko w bazie danych, aby to osiągnąć?

przykład można użyć następujących czynności, aby ustawić 2 dziesiętne:

<span data-bind="text: price.ToFixed(2)"></span> 

Czy istnieje coś takiego jak proste to tylko wyświetlaczu: '24.04.2013'

Dzięki z góry!

Odpowiedz

18

Dla mnie kluczem jest moment.js

Można zrobić coś tak prostego jak to:

<span data-bind="text: moment(createDate()).format('MM/DD/YYYY')"></span> 

Albo można napisać wiążącą pomocnika like this guy does, więc byłoby to coś jak:

<span data-bind="dateString: createDate, datePattern: 'MM/DD/YYYY'"></span> 
+1

@ Jason: using moment.js świetnie współpracuje z jedną niewielką korektą: „tekst : moment (createDate) .format ('MM/DD/YYYY') "... createDate nie jest funkcją, więc pomiń(). To jest czyste i łatwe, więc nawet nie spróbowałem alternatywy z pomocniczym pomocnikiem. Wielkie dzięki! – nanonerd

+0

Fajnie, cieszę się, że pomogło. Myślałem, że createDate był ko.observable(), ale jeśli nie jest to tak, nie ma potrzeby "()". –

+0

@JasonHaley link do drugiego rozwiązania jest martwy :( –

-2

Dodaj ten javascript:

String.prototype.Format = function (fmt) { 
var myDate = this; 
var o = { 
    "M+": myDate.getMonth() + 1, 
    "d+": myDate.getDate(), 
    "h+": myDate.getHours(), 
    "m+": myDate.getMinutes(), 
    "s+": myDate.getSeconds(), 
    "q+": Math.floor((myDate.getMonth() + 3)/3), 
    "S": myDate.getMilliseconds() 
}; 
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (myDate.getFullYear() + "").substr(4 - RegExp.$1.length)); 
for (var k in o) 
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 
return fmt; 

};

Następnie można użyć tak:

<span data-bind="text: createDate().Format('MM/DD/YYYY')"></span> 
+0

@ Zack: thanks ale moment.js działa świetnie i jest łatwy (za pomocą powyższej odpowiedzi). – nanonerd

+0

Nie powinien to być Date.prototype.Format = ... –

0

thanx pracował dla mnie, aby wyświetlić tylko raz:

<td data-bind="text:moment(OpeningTime()).format('h:mm:ss a')"></td> 
Powiązane problemy