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);
});