如何使用Knockout和自定义绑定将JSON DateTime转换为可读的日期和时间

jaf*_*ffa 3 javascript datetime knockout.js

我正在使用KnockoutJS和映射插件,并且除了DateTime字段之外一切都运行良好,它被序列化为如下的刻度:/ Date(x)/其中x = ticks.

我将如何:1)将日期对象解析为人类可读的形式?2)将这个从自定义绑定返回到模型中的值?

Mik*_*ard 14

这是knockoutjs中自定义绑定的示例.它使用moment.js来解析日期

  ko.bindingHandlers.date = {
    update: function (element, valueAccessor) {
      var value = valueAccessor();
      var date = moment(value);
      $(element).text(date.format("L"));
    }
  };
Run Code Online (Sandbox Code Playgroud)

在您的javascript中,您可以像任何其他敲除绑定一样使用新绑定.

  <td data-bind="date:Created" />
Run Code Online (Sandbox Code Playgroud)

  • 这给了我'NaN',除非你把*var date = moment(value)*调用改为*var date = moment(value())*,就像在ekenman的回答中一样 (2认同)

Mat*_*ley 5

我对KnockoutJS一无所知,所以可能有更好的方法来做这个已经内置的方法.我对第二个问题也一无所知.希望真正了解它的人可以帮到你.

所以,有了这个免责声明,这里是你如何使用"普通"JavaScript转换它(如果你想支持"旧"浏览器,你可能需要包括Douglas Crockford的json2.js).JSON.parse采用可选reviver参数,可以在解析时替换每个值.

JSON.parse(jsonText, function(key, value) {
    // Check for the /Date(x)/ pattern
    var match = /\/Date\((-?\d+)\)\//.exec(value);
    if (match) {
        var date = new Date(+match[1]); // Convert the ticks to a Date object
        return humanReadable(date); // Format the date how you want it
    }

    // Not a date, so return the original value
    return value;
});
Run Code Online (Sandbox Code Playgroud)