2

当源数据包含moment.js日期时,我使用敲除映射插件收到以下错误。

TypeError: this._d.getUTCDay is not a function
https://raw.github.com/timrwood/moment/develop/moment.js
Line 1300

我有一个非常简单的模型,如下所示。如果我使用

birthDate: new Date(2013, 6, 1)

它工作正常,但如果我将其更改为

birthDate: moment().add('days', -5)

它抛出上述错误。

JS小提琴

var NS = NS || {};

$(function () {

    NS.ViewModel1 = function (data) {
        var self = this;

        self.firstName = data && data.firstName || "Hello";
        self.lastName = data && data.lastName || "There";
        self.birthDate = data && data.birthDate || new Date(2000, 11, 17);
    };

    var data = {
        firstName: "John",
        lastName: "Doe",
        //birthDate: new Date(2013, 6, 1) // Works
        birthDate: moment().add('days', -5)
    };

    var vm1 = new NS.ViewModel1();
    console.log(vm1);
    ko.mapping.fromJS(data, {}, vm1);
    console.log(vm1);
    ko.applyBindings(vm1, document.getElementById("observableSection"));
});
4

1 回答 1

1

该调用moment().add('days', -5)返回一个“时刻”对象,该对象是日期周围的包装对象,不能由映射插件映射。

您需要调用.toDate()( doc ) 取回 JavaScipt 日期或.format()( doc ) 如果您希望将日期作为格式化字符串:

所以以下应该工作:

var data = {
    firstName: "John",
    lastName: "Doe",
    birthDate: moment().add('days', -5).toDate()
};

演示JSFiddle。

于 2013-06-06T07:19:25.600 回答