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を見てください。なぜ車輪の再発明をするのか。サミーの部分で本当にあなたを助けることはできません、ソズ。

于 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 に答える