2013-07-03 45 views
12

我想要在淘汰赛模板中格式化日期。 日期,目前正在返回在淘汰模板中格式化日期

2013-07-04T00:00:00 

我想它显示像

07/04/2013 

下面是我使用

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

的结合是它们的默认格式属性Knockout的模板中?

+1

没有什么建于淘汰赛关于日期格式或一般格式。你需要为此使用像[moment.js](http://momentjs.com/)这样的第三方库。 – nemesv

+0

谢谢@nemesv我包含了moment.js。 。正是我想要的。 – rross

回答

26

Knockout中没有关于日期格式化或格式化的内容。 text绑定只是将属性值转换为字符串,所以如果你想自定义格式化,你需要自己做。

在JavaScript中处理日期并不容易,所以你可能更喜欢使用第三方库,如moment.js。它使用起来非常简单,它可以使用format method格式化日期。有格式'L'为您需要的月份数字,月份的日期格式。

你可以在你的绑定就像在你的视图模型使用时刻JS或直接:

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

或者你可以创建一个封装此逻辑格式自定义绑定处理程序。

注意:确保在FirstDate属性上使用(),前提是它在数据绑定表达式中是ko.observable以获取其值。

+0

很好的回答:)。 –

+0

如果我们还想显示小时和分钟,该怎么办? –

+0

@lola可用的格式选项在moment.js文档中列出:http://momentjs.com/docs/#/displaying/format/ – nemesv

2

我在修改后的版本Stephen Redd's date extender中使用了moment.js。 看起来像这样,它比调用数据绑定中的函数稍微清洁一些。

<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 
    }); 
} 

视图模型:

self.YourDate = ko.observable().extend({ date: true }); 

http://momentjs.com/docs/#/displaying/format/