1

siteDatePicker.html:

        <html>
          <head>
            <title>Typehead</title>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
            <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.2/angular.js"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.2/angular-animate.js"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/1.1.2/ui-bootstrap-tpls.min.js"></script>
          <script src="./siteDatePicker.js"></script>

              <style>
              .full button span {
                background-color: limegreen;
                border-radius: 32px;
                color: black;
              }
              .partially button span {
                background-color: orange;
                border-radius: 32px;
                color: black;
              }
              .appointment>button {
                color: white;
                background-color: red;
              }

            </style>   

          </head>
          <body ng-app="ui.bootstrap.demo" >

             <div ng-controller="DatepickerDemoCtrl">
              <pre>Selected date is: <em>{{dt | date:'fullDate' }}</em></pre>

              <h4>Popup</h4>
              <div class="row">
                <div class="col-md-6">
                  <p class="input-group">
                    <input type="text" class="form-control"  uib-datepicker-popup="{{format}}" ng-model="dt" ng-change="dateSelected()"is-open="popup1.opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" alt-input-formats="altInputFormats" date-disabled="disabled(date, mode)" custom-class="dayClass(date, mode)" />
                    <span class="input-group-btn">
                      <button type="button" class="btn btn-default" ng-click="open1()"><i class="glyphicon glyphicon-calendar"></i></button>
                    </span>
                  </p>
                </div>
              </div>
            </div>
          </body>
        </html>

siteDatePicker.js:

        var myApp= angular.module('ui.bootstrap.demo', ['ngAnimate', 'ui.bootstrap', 'ui.bootstrap.dateparser', 'ui.bootstrap.datepicker']);



                     myApp.controller('DatepickerDemoCtrl', function($scope, $http) {


         $scope.holidays=[];
                    $scope.today = function() {
                        $scope.dt = new Date();
                      };
                      $scope.today();

                      $scope.clear = function() {
                        $scope.dt = null;
                      };

                      $scope.inlineOptions = {
                        minDate: new Date(),
                        showWeeks: false
                      };

                      $scope.dateOptions = {
                          formatYear: 'yy',
                          maxDate: new Date(2020, 5, 22),
                          minDate: new Date(),
                          startingDay: 1
                        };

                        // Disable weekend selection
                        function disabledasda(data) {
                          var date = data.date,
                            mode = data.mode;
                          return mode === 'day' && (date.getDay() === 0 || date.getDay() === 6);
                        }

                      $scope.toggleMin = function() {
                        $scope.inlineOptions.minDate = $scope.inlineOptions.minDate ? null : new Date();
                        $scope.dateOptions.minDate = $scope.inlineOptions.minDate;
                      };

                      $scope.toggleMin();

                      $scope.open1 = function() {
                        $scope.popup1.opened = true;
                      };


                      $scope.setDate = function(year, month, day) {
                        $scope.dt = new Date(year, month, day);
                      };

                      $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
                      $scope.format = $scope.formats[0];
                      $scope.altInputFormats = ['M!/d!/yyyy'];

                      $scope.popup1 = {
                        opened: false
                      };


                      var tomorrow = new Date();
                      tomorrow.setDate(tomorrow.getDate() + 1);
                      var afterTomorrow = new Date();
                      afterTomorrow.setDate(tomorrow.getDate() + 1);
                      $scope.events = [
                        {
                          date: tomorrow,
                          status: 'full'
                        },
                        {
                          date: afterTomorrow,
                          status: 'partially'
                        }
                      ];
                      $scope.disabled = function(date, mode){

                        $scope.holidays = [
                          new Date(2016,2,14),
                          new Date(2016,2,15),
                          new Date(2016,2,16),
                        ]

                        var isHoliday = false;
                        for(var i = 0; i < $scope.holidays.length ; i++) {
                          if(areDatesEqual($scope.holidays[i], date)){
                            isHoliday = true;
                          }
                        }

                        return ( mode === 'day' && isHoliday );
                      };

                      function areDatesEqual(date1, date2) {

                        return date1.setHours(0,0,0,0) === date2.setHours(0,0,0,0)

                      }

                      $scope.dayClass = function(date, mode) {

                    var appointments = [
                      new Date(2016,2,3),
                      new Date(2016,2,8),
                      new Date(2016,2,22),
                    ]

                    if (mode === 'day') {

                      var dateToCheck = new Date(date);

                      for(var i = 0; i < appointments.length ; i++) {
                        if(areDatesEqual(appointments[i], dateToCheck)){
                          return 'appointment';
                        }
                      }
                    }
                    return '';
                  };

                  $scope.dateSelected = function(){

            var appointments = [
              new Date(2016,2,3),
              new Date(2016,2,8),
              new Date(2016,2,22),
            ];

            var dateSelected = new Date($scope.dt);

            for(var i = 0; i < appointments.length ; i++) {
              if(areDatesEqual(appointments[i], dateSelected)){
                performAction();
              }
            }

          };

          function performAction(){
            alert("Appointment date selected");
             $scope.holidays.push(new Date(2016,2,14));

                        $scope.disabled(date,mode);
          }



                     });

above is what i tried...i tried pushing new dates in in holidays array where dates are disabled...its done in the performaction function.....

firstly i want to load the calendar with all dates disabled at first and than i have to be able to enabled specific dates of my choice....

secondly after tha calendar has loaded and the specific dates have been enabled, i want to enable more dates on click of any of the enabled dates.

example: all dates are disabled when calendar is loaded 27-03-2016 is enabled when calendar is loaded on click of 27-03-2016, it enables 28-03-2016

please note: i want to disables ALL DATES and not to disable datepicker.

any help would be appreciated!

1
  • done....any person who lands on this page, use the following link: dotnetlearners.com/blogs/view/206/… now set maxdate and mindate by passing todays date...and code to disable specific date is above in my question...you can disable current that with that...done! but now i want to enable certain dates.... Commented Mar 27, 2016 at 15:56

1 Answer 1

1

here is the complete answer for those in need: (id like to thank @Sergio Marron for all his help)

siteDatePicker.js:

     var myApp= angular.module('ui.bootstrap.demo', ['ngAnimate', 'ui.bootstrap', 'ui.bootstrap.dateparser', 'ui.bootstrap.datepicker']);



                 myApp.controller('DatepickerDemoCtrl', function($scope, $http) {

                $scope.today = function() {
                    $scope.dt = new Date();
                  };
                  $scope.today();

                  $scope.clear = function() {
                    $scope.dt = null;
                  };

                  $scope.inlineOptions = {
                    minDate: new Date(),
                    showWeeks: false
                  };

                  $scope.dateOptions = {
                      formatYear: 'yy',
                      maxDate: new Date(2020, 5, 22),
                      minDate: new Date(),
                      startingDay: 1
                    };

                    // Disable weekend selection
                    function disabledasda(data) {
                      var date = data.date,
                        mode = data.mode;
                      return mode === 'day' && (date.getDay() === 0 || date.getDay() === 6);
                    }

                  $scope.toggleMin = function() {
                    $scope.inlineOptions.minDate = $scope.inlineOptions.minDate ? null : new Date();
                    $scope.dateOptions.minDate = $scope.inlineOptions.minDate;
                  };

                  $scope.toggleMin();

                  $scope.open1 = function() {
                    $scope.popup1.opened = true;
                  };


                  $scope.setDate = function(year, month, day) {
                    $scope.dt = new Date(year, month, day);
                  };

                  $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
                  $scope.format = $scope.formats[0];
                  $scope.altInputFormats = ['M!/d!/yyyy'];

                  $scope.popup1 = {
                    opened: false
                  };


                  var tomorrow = new Date();
                  tomorrow.setDate(tomorrow.getDate() + 1);
                  var afterTomorrow = new Date();
                  afterTomorrow.setDate(tomorrow.getDate() + 1);
                  $scope.events = [
                    {
                      date: tomorrow,
                      status: 'full'
                    },
                    {
                      date: afterTomorrow,
                      status: 'partially'
                    }
                  ];
                  $scope.disabled = function(date, mode){

                    $scope.holidays = [
                      new Date(2016,2,14),
                      new Date(2016,2,15),
                      new Date(2016,2,16),
                      new Date()
                    ]

                    var isHoliday = false;
                    for(var i = 0; i < $scope.holidays.length ; i++) {
                      if(areDatesEqual($scope.holidays[i], date)){
                        isHoliday = true;
                      }
                    }

                    return ( mode === 'day' && isHoliday );
                  };

                  function areDatesEqual(date1, date2) {

                    return date1.setHours(0,0,0,0) === date2.setHours(0,0,0,0)

                  }

                  $scope.dayClass = function(date, mode) {

                var appointments = [
                  new Date(2016,2,3),
                  new Date(2016,2,8),
                  new Date(2016,2,22),
                ]

                if (mode === 'day') {

                  var dateToCheck = new Date(date);

                  for(var i = 0; i < appointments.length ; i++) {
                    if(areDatesEqual(appointments[i], dateToCheck)){
                      return 'appointment';
                    }
                  }
                }
                return '';
              };

              $scope.dateSelected = function(){

        var appointments = [
          new Date(2016,2,3),
          new Date(2016,2,8),
          new Date(2016,2,22),
        ];

        var dateSelected = new Date($scope.dt);

        for(var i = 0; i < appointments.length ; i++) {
          if(areDatesEqual(appointments[i], dateSelected)){
            performAction();
          }
        }

      };

      function performAction(){
        alert("Appointment date selected");
      }


     $scope.dtmax = new Date();
                 });

siteDatepicker.html:

        <html>
          <head>
            <title>Typehead</title>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
            <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.2/angular.js"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-rc.2/angular-animate.js"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/1.1.2/ui-bootstrap-tpls.min.js"></script>
          <script src="./siteDatePicker.js"></script>

              <style>
              .full button span {
                background-color: limegreen;
                border-radius: 32px;
                color: black;
              }
              .partially button span {
                background-color: orange;
                border-radius: 32px;
                color: black;
              }
              .appointment>button {
                color: white;
                background-color: red;
              }

            </style>   

          </head>
          <body ng-app="ui.bootstrap.demo" >

             <div ng-controller="DatepickerDemoCtrl">
              <pre>Selected date is: <em>{{dt | date:'fullDate' }}</em></pre>

              <h4>Popup</h4>
              <div class="row">
                <div class="col-md-6">
                  <p class="input-group">
                    <input type="text" class="form-control"  uib-datepicker-popup="{{format}}" ng-model="dt" ng-change="dateSelected()"is-open="popup1.opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" alt-input-formats="altInputFormats" date-disabled="disabled(date, mode)" custom-class="dayClass(date, mode)"  max-date="dtmax" min-date="dtmax"/>
                    <span class="input-group-btn">
                      <button type="button" class="btn btn-default" ng-click="open1()"><i class="glyphicon glyphicon-calendar"></i></button>
                    </span>
                  </p>
                </div>
              </div>
            </div>
          </body>
        </html>

to all the helping hands...thank you! special mention to avesh Naik and Nazeef Shaikh!

Sign up to request clarification or add additional context in comments.

1 Comment

I just tried to implement your code but it isn't working meaning am not able to select the appointment dates. Please advise if am missing something.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.