2013-05-08 10 views
5

Tôi có một mảng, một khóa là createDate. Trong một vòng lặp foreach của mảng, tôi kéo giá trị createDate thông qua một ràng buộc văn bản loại trực tiếp.loại trực tiếp - cách liên kết ngày chỉ

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

Giá trị hiển thị: '2013-04-24T16: 29: 00.38' ... đây là cách nó tồn tại trong cơ sở dữ liệu. Có cách nào để định dạng (trong ràng buộc) chỉ hiển thị ngày tháng không? Hoặc tôi có phải lưu nó như là ngày chỉ trong cơ sở dữ liệu để đạt được điều này?

Ví dụ: bạn có thể sử dụng sau để thiết lập 2 số thập phân:

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

Có một cái gì đó đơn giản như thế này để chỉ hiển thị: '2013/04/24'

Cảm ơn trước!

Trả lời

18

Đối với tôi, quan trọng là moment.js

Bạn có thể làm một cái gì đó đơn giản như này:

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

Hoặc bạn có thể viết một helper ràng buộc like this guy does, vì vậy nó sẽ là một cái gì đó như:

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

@ Jason: sử dụng moment.js hoạt động tuyệt vời với một sửa chữa nhỏ: "text : moment (createDate) .format ('MM/DD/YYYY') "... createDate không phải là một hàm để loại bỏ(). Điều này là sạch sẽ và dễ dàng, vì vậy tôi thậm chí không thử thay thế với helper ràng buộc. Cảm ơn nhiều! – nanonerd

+0

Tuyệt vời, vui vì nó đã giúp ích. Tôi đã nghĩ rằng createDate là một ko.observable(), nhưng nếu nó không phải là sau đó yeah, không cần cho '()'. –

+0

@JasonHaley liên kết đến giải pháp thứ hai của bạn đã chết: ( –

-2

Thêm javascript này:

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; 

};

Sau đó, bạn có thể sử dụng như thế này:

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

@ Zack: cảm ơn nhưng moment.js hoạt động rất tốt và rất dễ (thông qua câu trả lời ở trên) – nanonerd

+0

Không nên là Date.prototype.Format = ... –

0

thanx nó làm việc cho tôi để chỉ hiển thị thời gian:

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