Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save brainwire/6574c965bbd1a68ff2e9 to your computer and use it in GitHub Desktop.
Save brainwire/6574c965bbd1a68ff2e9 to your computer and use it in GitHub Desktop.
Two-way binding between form field and moment.js date object for angular.js. With validation.Date object is in UTC, form field displays local date.
directive('dateBinding', function() {
//var format = "YYYY-MM-DD HH:mm:ss"
//date.isValid() is not enough for strict validation, see moment.js doc
//var pattern = /^\s*\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}(:\d{2})?\s*$/
var parseFormat = attrs.dateBinding;
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attr, ngModel) {
ngModel.$parsers.push(function(text) {
var date = moment(text, parseFormat)
ngModel.$setValidity('dateInvalid', date.isValid()) //&& text.match(pattern))
return date
})
ngModel.$formatters.push(function(datetime_moment) {
return datetime_moment && datetime_moment.local().format(parseFormat)
})
}
};
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment