禁用过去的时间角度引导日期时间选择器

时间:2016-03-02 00:53:11

标签: angularjs datetimepicker angular-bootstrap

我正在使用angular bootstrap datetimepicker。我想为过去的日期和时间制作Invitation.objects.filter(...).delete()

我该怎么做?

如果您需要代码示例,请与我们联系。

3 个答案:

答案 0 :(得分:1)

我假设您使用的是angular-bootstrap-datetimepicker,因此您需要使用before-render callback

代码看起来像这样:

function BeforeRender ($dates) {
  var activeDate = moment();

  $dates.filter(function (date) {
    return date.localDateValue() >= activeDate.valueOf()
  }).forEach(function (date) {
    date.selectable = false;
  })
}

自述文件有一个example of a date range picker可以满足您的需要。

答案 1 :(得分:0)

正如您在其网站上看到的那样(https://angular-ui.github.io/bootstrap/#/datepicker),您可以通过配置对象a" dateDisabled"。

这是示例的html:

<style>
  .full button span {
    background-color: limegreen;
    border-radius: 32px;
    color: black;
  }
  .partially button span {
    background-color: orange;
    border-radius: 32px;
    color: black;
  }
</style>
<div ng-controller="DatepickerDemoCtrl">
    <pre>Selected date is: <em>{{dt | date:'fullDate' }}</em></pre>

    <h4>Inline</h4>
    <div style="display:inline-block; min-height:290px;">
      <uib-datepicker ng-model="dt" class="well well-sm" datepicker-options="inlineOptions"></uib-datepicker>
    </div>

    <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" is-open="popup1.opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" alt-input-formats="altInputFormats" />
          <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 class="col-md-6">
        <p class="input-group">
          <input type="text" class="form-control" uib-datepicker-popup ng-model="dt" is-open="popup2.opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" />
          <span class="input-group-btn">
            <button type="button" class="btn btn-default" ng-click="open2()"><i class="glyphicon glyphicon-calendar"></i></button>
          </span>
        </p>
      </div>
    </div>
    <div class="row">
      <div class="col-md-6">
        <label>Format: <span class="muted-text">(manual alternate <em>{{altInputFormats[0]}}</em>)</span></label> <select class="form-control" ng-model="format" ng-options="f for f in formats"><option></option></select>
      </div>
    </div>

    <hr />
    <button type="button" class="btn btn-sm btn-info" ng-click="today()">Today</button>
    <button type="button" class="btn btn-sm btn-default" ng-click="setDate(2009, 7, 24)">2009-08-24</button>
    <button type="button" class="btn btn-sm btn-danger" ng-click="clear()">Clear</button>
    <button type="button" class="btn btn-sm btn-default" ng-click="toggleMin()" uib-tooltip="After today restriction">Min date</button>
</div>

这是JavaScript:

angular.module('ui.bootstrap.demo').controller('DatepickerDemoCtrl', function ($scope) {
  $scope.today = function() {
    $scope.dt = new Date();
  };
  $scope.today();

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

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

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

  // Disable weekend selection
  function disabled(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.open2 = function() {
    $scope.popup2.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
  };

  $scope.popup2 = {
    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'
    }
  ];

  function getDayClass(data) {
    var date = data.date,
      mode = data.mode;
    if (mode === 'day') {
      var dayToCheck = new Date(date).setHours(0,0,0,0);

      for (var i = 0; i < $scope.events.length; i++) {
        var currentDay = new Date($scope.events[i].date).setHours(0,0,0,0);

        if (dayToCheck === currentDay) {
          return $scope.events[i].status;
        }
      }
    }

    return '';
  }
});

注意这一行:

dateDisabled: disabled,

通过在配置对象中传递此功能,可以将功能禁用设置为禁用日期的处理程序。所以在几行后你可以阅读禁用的功能:

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

该功能的两个参数是:

  • 日期
  • 模式

date是一个普通的JavaScript日期对象,您可以使用所有date methods来实现此目的。

模式是日期模式,您可以在此示例中看到验证模式是否等于&#34; day&#34;。

因此,您可以通过这种方式禁用一系列日期或自定义日期。

答案 2 :(得分:0)

我最近遇到了这个问题,在阅读了一些stackoverflow答案之后,我想到了以下代码:

这也可以照顾白天,小时和分钟。

    $scope.startDateBeforeRender = function($view, $dates, $leftDate, $upDate, $rightDate) {
        const minDate = moment().local().startOf($view).valueOf();
        for(let i=0; i < $dates.length; i++) {
            if($view === 'day' || $view === 'hour') {
                if (minDate > $dates[i].localDateValue()) {
                    $dates[i].selectable = false;
                }
            } else {
                if (minDate >= $dates[i].localDateValue()) {
                    $dates[i].selectable = false;
                }
            }
        }
    };

HTML为:

<md-input-container class="md-block" flex-gt-sm>
    <label>Time</label>
    <div class="dropdown">
        <a class="dropdown-toggle" id="dropdown2" role="button" data-toggle="dropdown" data-target="#" href="javascript:void(0);">
            <div class="input-group">
                <input type="text" class="form-control" data-ng-model="data.dateDropDownInput"><span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
            </div>
        </a>
        <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
            <datetimepicker data-ng-model="data.dateDropDownInput" data-before-render="startDateBeforeRender($view, $dates, $leftDate, $upDate, $rightDate)" data-datetimepicker-config="{ dropdownSelector: '#dropdown2' }"/>
        </ul>
    </div>
</md-input-container>