Skip to content

Instantly share code, notes, and snippets.

@kolen
Created September 14, 2013 17:56
Show Gist options
  • Save kolen/6564094 to your computer and use it in GitHub Desktop.
Save kolen/6564094 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('datetime', 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*$/
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attr, ngModel) {
ngModel.$parsers.push(function(text) {
var date = moment(text, format)
ngModel.$setValidity('dateInvalid', date.isValid() && text.match(pattern))
return date
})
ngModel.$formatters.push(function(datetime_moment) {
return datetime_moment && datetime_moment.local().format(format)
})
}
};
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment