knockout.moment-binding

Demo of a knockout date parser based on moment.js.

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/3.1.0/knockout-min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.7.0/moment.min.js"></script>
<script src="https://rawgit.com/grahampcharles/moment-knockout/master/src/knockout.moment-binding.js"></script>
<h2>Normal</h2>

<h3>Things to try:</h3>
<ul>
    <li>'1/20'</li>
    <li>'today'</li>
    <li>arrow keys</li>
    <li>page up/page down</li>
</ul>

<input type="text" data-bind="moment: dateOfBirth, format: 'MMMM D, YYYY', invalid:'invalid', beforeParse:function(d) { if (d=='today') { return new Date() } else return d; }" />

<div data-bind="text: dateOfBirth"></div>

<h2>Month-Style</h2>

<h3>Things to try:</h3>
<ul>
    <li>'1/1999'</li>
    <li>arrow keys</li>
    <li>page up/page down</li>
</ul>
<input type="text"
       data-bind="moment: dateMonth, format: 'MMMM YYY', unit:'month', parsePattern: ['M/YY', 'M/YYYY', 'YYYY-M' ], afterParse: function(d) { return moment(d).isValid() ? moment(d).startOf('month') : new Date(); }"/>

<div data-bind="text: dateMonth"></div>

CSS

input {
            text-align: center;
        }

JavaScript

$(function () {
 window.viewModel = {
        dateOfBirth: new ko.observable('1970-10-01'),
        dateMonth: new ko.observable('1970-01-01')
    };

    ko.applyBindings(window.viewModel);
});