Knockout.js格式化日期项目

Mar*_*tin 33 html5 datetime knockout.js

在我看来,我希望显示一个knockout.js包含日期的绑定字段.它只是一个显示字段而不是输入字段.像下面的东西basemodel.actionDate = ko.observable()

<p class="display-field" data-bind="text: baseModel.actionDate"/> 
Run Code Online (Sandbox Code Playgroud)

但是,显示如下:

2013-06-17T11:56:18.4537687Z
Run Code Online (Sandbox Code Playgroud)

格式化这个的最简单方法是什么dd mm yyyy.例如:17 June 2013

Bra*_*don 73

我推荐moment.js日期格式库.

使用它,您可以在视图中执行以下操作:

<p class="display-field" data-bind="text: moment(baseModel.actionDate()).format('LL')"/>
Run Code Online (Sandbox Code Playgroud)

  • 啊,如果你的`actionDate`是一个ko.observable,那么你需要把`()`放在那里以获得值,然后再传递给它.我修改了帖子. (8认同)

And*_*ers 13

确保服务以正确的格式输出,或在客户端格式化

如果你想要客户端,那么你可以将ISO日期字符串解析为Date对象,然后使用jQuery globalize将其格式化为所需的格式.

我为此使用了KO扩展器

http://jsfiddle.net/vRf5B/42/

ko.extenders.date = function(target, format) {
    return ko.computed({
        read: function() {
            var value = target();
            if(typeof value === "string") {
                value = new Date(value);                
            }

            format = typeof format === "string" ? format: undefined;
            value = Globalize.format(value, format);

            return value;        
        },
        write: target
    });
}
Run Code Online (Sandbox Code Playgroud)

更新

我在我的博客上有一个问题如何检索原始日期值可以完成我在计算的上面公开原始值

http://jsfiddle.net/vRf5B/91/

  • 对于使用KO或Angular的现代MVVM站点,您需要真正的Date对象,以便可以对它们应用逻辑 (3认同)