根据条件启用日期

时间:2017-05-21 00:35:30

标签: javascript angularjs

我正在开发angularjs应用程序。我有两个日期字段,要求是当用户在可用日期日历中选择日期时,过期日期字段应该启用,用户应该能够在24天内选择日期在可用日期字段中选择的日期。 例如,当用户在“可用日期”字段中选择日期为2017-03-02时,应启用过期日期字段,日历应仅启用24天,然后启用2017-03-02(即2017-03-25),并且所有日期应禁用,以便用户无法在2017-03-25之后或2017-03-02之前选择任何日期。 请找到演示here

js code:

myApp.controller("myController", ["$scope",
    function($scope) {
        var today = new Date();
        $scope.AvailableDate = new Date();
        $scope.ExpireDate = new Date();
        $scope.dateFormat = 'yyyy-MM-dd';
        $scope.availableDateOptions = {
            formatYear: 'yy',
            startingDay: 1,
            minDate: "2016-03-12",
            maxDate: today
        };
        $scope.expireDateOptions = {
            formatYear: 'yy',
            startingDay: 1,
            minDate: today,
            maxDate: "2017-06-12"
        };
        $scope.availableDatePopup = {
            opened: false
        };
        $scope.expireDatePopup = {
            opened: false
        };
        $scope.ChangeExpiryMinDate = function(availableDate) {
            if (availableDate != null) {
                var expiryMinDate = new Date(availableDate);
                $scope.expireDateOptions.minDate = expiryMinDate;
                $scope.ExpireDate = expiryMinDate;
                //code to set maxDates in Expire Date field -start
                 var date = new Date(expiryMinDate);
                 var newdate = new Date(date);
                 newdate.setDate(newdate.getDate() + 3);
                 var dd = newdate.getDate();
                 var mm = newdate.getMonth() + 1;
                 var y = newdate.getFullYear();
                  var someFormattedDate = y + '/' + dd + '/' + mm;
                  $scope.expireDateOptions.maxDate = someFormattedDate;
                //code to set maxDates in Expire Date field -end
            }
        };
        $scope.ChangeExpiryMinDate();
        $scope.OpenAvailableDate = function() {
            $scope.availableDatePopup.opened = !$scope.availableDatePopup.opened;
        };
        $scope.OpenExpireDate = function() {
            $scope.expireDatePopup.opened = !$scope.expireDatePopup.opened;
        };
    }
]);

以下是我尝试但未成功的代码。

 var date = new Date(expiryMinDate);
                     var newdate = new Date(date);
                     newdate.setDate(newdate.getDate() + 3);
                     var dd = newdate.getDate();
                     var mm = newdate.getMonth() + 1;
                     var y = newdate.getFullYear();
                      var someFormattedDate = y + '/' + dd + '/' + mm;
                      $scope.expireDateOptions.maxDate = someFormattedDate;

1 个答案:

答案 0 :(得分:1)

根据您的要求,我使用以下内容来保持minDate和maxDate的设置:

$scope.ChangeExpiryMinDate = function(availableDate) {
        if (availableDate != null) {
            var availableDate = new Date(availableDate);
            var expiryMinDate = angular.copy(availableDate);
            expiryMinDate.setDate(expiryMinDate.getDate() + 23);

            $scope.ExpireDate = availableDate;
            $scope.expireDateOptions.minDate = availableDate;
            $scope.expireDateOptions.maxDate = expiryMinDate;
        } else {
            delete $scope.ExpireDate;
        }
    };

$scope.ChangeExpiryMinDate($scope.AvailableDate);

您忘记将当前的AvailableDate传递给函数,因此当控制器首次加载时,到期日期字段已经被限制。

要禁用周末,您可以使用以下命令更新ExpiryDate选项:

$scope.expireDateOptions = {
    formatYear: 'yy',
    startingDay: 1,
    minDate: today,
    maxDate: "2017-06-12",
    dateDisabled: function(data) {
        var date = data.date;
        var mode = data.mode;
        return (mode === 'day' && ( date.getDay() === 0 || date.getDay() === 6 ));
    }
};

我在这里创建了一个有效的JSFiddle:https://jsfiddle.net/1ahyk735/