(function () { 'use strict'; angular.module('angularApp') .directive("compareWithStartDate", compareWithStartDate) .directive("demoDatepicker", CreateDatePicker) function compareWithStartDate() { return { require: 'ngModel', link: function (scope, elem, $attrs, ngModel) { ngModel.$parsers.unshift(CheckDateValidation); ngModel.$formatters.unshift(CheckDateValidation); $attrs.$observe('checkDate', function (comparisonModel) { return CheckDateValidation(ngModel.$viewValue); }); function CheckDateValidation(viewValue) { var comparisonModel = $attrs.compareWithStartDate.replace(/"/g, ""); var splittedValue = []; if (typeof (viewValue) != 'undefined' && viewValue.indexOf('/') != -1) { var copiedViewValue = angular.copy(viewValue); splittedValue = String(copiedViewValue).split("/"); //copiedViewValue = splitteValue[1] + "/" + splitteValue[0] + "/" + splitteValue[2]; } var endDate; if (splittedValue.length != 0) { endDate = new Date(splittedValue[0], parseInt(splittedValue[1]) - 1, splittedValue[2]); } //var startDate = Date.parse(comparisonModel); var startDate = new Date(comparisonModel); // startDate.setDate(startDate.getDate()+1) if (typeof (endDate) != 'undefined' && typeof (startDate) != 'undefined') { if (startDate <= endDate) { ngModel.$setValidity('checkDate', true); } else { ngModel.$setValidity('checkDate', false); } return viewValue; } } } }; } function CreateDatePicker() { return { restrict: 'A', require: 'ngModel', link: function (scope, element, attrs, ngModelCtrl) { element.datepicker({ dateFormat: 'yy/mm/dd', changeMonth: true, onSelect: function (date) { ngModelCtrl.$setViewValue(date); ngModelCtrl.$render(); } }); } } } })();