1

我在javascript中有当前日期,如下所示:

self.currentDate = ko.observable(new Date());

我想在 yyyy-mm-dd 中格式化日期并在 Sammy 中使用,如下所示:

this.get('', function () { this.app.runRoute('get', '#'+self.currentDate()) });

有很多漫长的过程要做。但是有什么方法可以轻松做到。或者我可以在 document.ready 函数中使用它并在这里使用它。

4

2 回答 2

2

看看 datejs。

http://www.datejs.com/

这是一个 Javascript 日期库,它将处理您的格式转换。它扩展了 toString 方法,以便您可以完成以下操作:-

self.currentDate().toString('yyyy-M-d')

有几个选项可以与 Knockout 集成,但上面的选项在返回 yyyy-mm-dd 格式时会“起作用”。

仍然使用 datejs 的另一种方法是将函数包装在 ko.computed 中:-

self.displayDate = ko.computed(function(){
   return self.currentDate().toString('yyyy-M-d');
});

如果您不想使用 datejs,您可以自己滚动并将其包装在计算中。

self.displayDate = ko.computed(function(){
   var year = self.currentDate().getFullYear().toString();
   var month = (self.currentDate().getMonth() + 1).toString();
   var day   = self.currentDate().getDay().toString();
   var pad = "00";

   return year + '-' +
     pad.substring(0, pad.length, month.length ) + month + '-' +
     pad.substring(0, pad.length, day.length ) + day;

});

但说真的,先看看 datejs。为什么要重新发明轮子。在 Sammy 方面真的帮不了你,soz。

于 2012-10-12T08:45:06.197 回答
0

另一种选择是创建自定义绑定处理程序

更多信息:http: //jason-mitchell.com/web-development/binding-dates-using-knockout-moment-js/

ko.bindingHandlers.date = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
    var value = valueAccessor();
    var allBindings = allBindingsAccessor();
    var valueUnwrapped = ko.utils.unwrapObservable(value);

    // Date formats: http://momentjs.com/docs/#/displaying/format/
    var pattern = allBindings.format || 'DD/MM/YYYY';

    var output = "-";
    if (valueUnwrapped !== null && valueUnwrapped !== undefined && valueUnwrapped.length > 0) {
        output = moment(valueUnwrapped).format(pattern);
    }

    if ($(element).is("input") === true) {
        $(element).val(output);
    } else {
        $(element).text(output);
    }
}
};


<div>
    <label>Date of Birth:</label>
    <input type="text" data-bind="date: dateOfBirth, format: 'DD MMM YYYY'" />
</div>

需要 moment.js:http ://momentjs.com/

于 2014-06-27T19:42:44.243 回答