javascript AngularJS - 检查所选日期是否等于下一个营业日期

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18404846/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-27 11:47:24  来源:igfitidea点击:

AngularJS - Check if selected date is equal to next business date

javascriptangularjsangularjs-directiveangularjs-scope

提问by sharic19

I am trying to check if selected date is equal to next business date using AngularJS. If selected date is not equal to the next business date, a warning will be shown, like twitter bootstrap's alert-warning, using ng-show angularjs directive.

我正在尝试使用 AngularJS 检查所选日期是否等于下一个营业日期。如果所选日期不等于下一个营业日期,则会使用 ng-show angularjs 指令显示警告,例如 twitter bootstrap 的警报警告。

Here's the current Fiddlefor this.

这是当前的Fiddle

Currently, the next business day is returned by getNextBusinessDay() $scope function. The comparison is triggered by ng-changed="comparisonResult()" which should return true/false based on comparison, but isn't working.

目前,下一个工作日由 getNextBusinessDay() $scope 函数返回。比较由 ng-changed="comparisonResult()" 触发,它应该根据比较返回真/假,但不起作用。

Here my html code:

这是我的 html 代码:

<body ng-app="angularjs-starter" ng-controller="MainCtrl">
<div class="container">
  <section id="datepicker">
    <div class="bs-docs-example">
      <form class="form-horizontal well">
        <div class="control-group input-append">
          <label for="inputDatepicker" class="label" style="margin-right:6px;">
            Selected Date</label>
          <input id="inputDatepicker" class="input-small" type="text" 
            ng-model="selectedDate" ng-changed="comparisonResult()" 
            data-date-format="dd/mm/yyyy" bs-datepicker>
          <button type="button" class="btn" data-toggle="datepicker">
          <i class="icon-calendar"></i></button>
        </div>
      </form>
    </div>
  </section>
</div>
</body>

Here's my js code:

这是我的js代码:

var app = angular.module('angularjs-starter', ['$strap.directives']);

app.controller('MainCtrl', function($scope, $window, $location) {

  // Datepicker directive
  $scope.selectedDate = null;

    $scope.getNextBusinessDay = function() {
        return $scope.getDeliveryDateObj(1);
    }

    $scope.getDeliveryDateObj = function(businessDaysLeftForDelivery){
        var now = new Date();
        var dayOfTheWeek = now.getDay();
        var calendarDays = businessDaysLeftForDelivery;
        var deliveryDay = dayOfTheWeek + businessDaysLeftForDelivery;
        if (deliveryDay >= 6) {
            businessDaysLeftForDelivery -= 6 - dayOfTheWeek; // deduct this-week days
            calendarDays += 2; // count this coming weekend
            deliveryWeeks = Math.floor(businessDaysLeftForDelivery / 5); // how many whole weeks?
            calendarDays += deliveryWeeks * 2; // two days per weekend per week
        }
        now.setTime(now.getTime() + calendarDays * 24 * 60 * 60 * 1000);

        now.setUTCHours(0);
        now.setUTCMinutes(0);
        now.setUTCSeconds(0);
        now.setUTCMilliseconds(0);

        return now;
    }

    $scope.getNextBusinessDay();

    $scope.comparisonResult = function() {
        if($scope.selectedDate == $scope.getNextBusinessDay()) {
            return false;
        } else {
            return true;
        }
    };

});

Any help or suggestion will be appreciated. Thanks in advance. :)

任何帮助或建议将不胜感激。提前致谢。:)

采纳答案by Jussi Kosunen

When comparing dates, use a.getTime() == b.getTime()instead of a == b.

比较日期时,请使用a.getTime() == b.getTime()代替a == b

回答by Adamy

It is 2017 now, if you use Angular >= v1.2 you can use angular.equals(date1, date2)

现在是 2017 年,如果你使用 Angular >= v1.2 你可以使用 angular.equals(date1, date2)