2013-05-08 12 views
5

Ho un array, una chiave è createDate. In un ciclo di foreach dell'array, tiro il valore createDate tramite un binding di testo a eliminazione diretta.knockout - come associare solo la data

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

Il valore viene visualizzato: '2013-04-24T16: 29: 00.38' ... questo è il modo in cui esiste nel database. C'è un modo per formattare (all'interno della rilegatura) per mostrare solo la data? O devo salvarlo come data solo nel database per raggiungere questo obiettivo?

esempio è possibile utilizzare il seguente per impostare 2 decimali:

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

C'è qualcosa di semplice come questo solo visualizzazione: '2013/04/24'

Grazie in anticipo!

risposta

18

Per me la chiave è moment.js

Si può fare qualcosa di semplice come questo:

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

Oppure si potrebbe scrivere un aiutante vincolante like this guy does, quindi sarebbe qualcosa di simile:

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

@ Jason: usando moment.js funziona alla grande con una piccola correzione: "text : momento (createDate) .format ('MM/DD/YYYY') "... createDate non è una funzione quindi non utilizzare(). Questo è pulito e facile, quindi non ho nemmeno provato l'alternativa con l'helper vincolante. Grazie mille! – nanonerd

+0

Cool, felice che sia stato d'aiuto. Stavo pensando che createDate fosse un ko.observable(), ma se non lo è allora, non c'è bisogno di "()". –

+0

@JasonHaley il link alla tua seconda soluzione è morto :( –

-2

Aggiungi questo 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; 

};

quindi è possibile utilizzare in questo modo:

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

@ Zack: grazie ma moment.js funziona alla grande ed è facile (tramite la risposta sopra) – nanonerd

+0

Non dovrebbe essere Date.prototype.Format = ... –

0

thanx ha funzionato per me per visualizzare l'ora solo:

<td data-bind="text:moment(OpeningTime()).format('h:mm:ss a')"></td> 
Problemi correlati