Skip to content Skip to sidebar Skip to footer

Change Md-datepicker Ng-model Format

I'm using Angular Material md-datepicker. The value of ng-model looks something like this: '2017-04-04T22:12:51.000Z' (it's called ISO format or something..) Well, the question is:

Solution 1:

However, I've fixed my problem by creating a custom directive.

Hope this helps some other developers too.

Yohoo!

angular.module('MyApp')

.controller('AppCtrl', function($scope) {
  $scope.person = {
    name: "John",
    birthDate: "1990-01-01 00:00:00"
  };
})

.directive('mdDatepicker', function () {
  functionlink(scope, element, attrs, ngModel) {
    var parser = function (val) {
      val = moment(val).format('YYYY-MM-DD hh:mm:ss');
      return val;
    };
    var formatter = function (val) {
      if (!val) return val;
      val = moment(val).toDate();
      return val;
    };
    ngModel.$parsers.push(parser);
    ngModel.$formatters.push(formatter);
  }
  return {
    require: 'ngModel',
    link: link,
    restrict: 'EA',
    priority: 1
  }
});
<linkhref="https://material.angularjs.org/HEAD/docs.css"rel="stylesheet"/><linkhref="https://material.angularjs.org/HEAD/angular-material.css"rel="stylesheet"/><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.js"></script><scriptsrc="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.js"></script><scriptsrc="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular-animate.min.js"></script><scriptsrc="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular-aria.min.js"></script><scriptsrc="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular-messages.min.js"></script><scriptsrc="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular-route.min.js"></script><scriptsrc="https://material.angularjs.org/HEAD/angular-material.js"></script><scriptsrc="https://s3-us-west-2.amazonaws.com/s.cdpn.io/t-114/assets-cache.js"></script><divng-app="MyApp"ng-controller="AppCtrl"><md-content><md-datepickerng-model="person.birthDate"md-placeholder="Enter date"></md-datepicker></md-content><big>ng-model value is: <strong>{{person.birthDate}}</strong></big></div>

Solution 2:

This is an old post but just in case:

The md-datepicker object only accept date object. You can create a temporary date variable for your ng-model and then convert the date variable into a string in the ng-change directive.

<md-datepickerng-model="tempDate"md-placeholder="Enter date"ng-change="person.birthDate = formatDate(tempDate)"></md-datepicker>

Then in the controller just implement the formatDate() function:

$scope.formatDate = function (date) {
     return moment(date).format('YYYY-MM-DD hh:mm:ss');
   }

I hope it helps

Post a Comment for "Change Md-datepicker Ng-model Format"