【问题标题】:How to compare two dates to have validation functionality如何比较两个日期以具有验证功能
【发布时间】:2017-03-02 11:24:34
【问题描述】:

您好,我正在做一个我在日期字段的项目。

我需要对同一字段进行验证。

1) 应该允许用户选择以前的日期或年份。 2) 但不允许用户选择未来的日期。

我使用了下面的代码,它仅在今年可以正常工作。 谁能帮我实现它。

 $scope.$watch('date', function(val) {
   var dateNewOnCreatessssss = $scope.convertedTimeToSend(new Date());
   console.log("dateNewOnCreatessssss", dateNewOnCreatessssss);
   $scope.convertedTimeToSend = function(timestamp) {
     var c = moment(timestamp).format("MM-DD-YYYY");
     return c;
   };
   if (val) {
     $scope.dateErrorMsg = false;
   }
   var dateNewOnCreatessssssll = $scope.convertedTimeToSend(val);
   console.log("dateNewOnCreatessssssll", dateNewOnCreatessssssll);
   if (dateNewOnCreatessssssll > dateNewOnCreatessssss) {
     $scope.dateErrorMsgsssssss = true;
     $scope.newReceiptSaveBtn = "true";
   } else {
     $scope.dateErrorMsgsssssss = false;
     $scope.newReceiptSaveBtn = "false";
   }
 });

【问题讨论】:

    标签: javascript jquery angularjs momentjs


    【解决方案1】:

    嗯,m8,你的代码是一团糟。只需使用momentjs 提供的所有好东西来使它工作。最后这个函数应该看起来像这个简单的 sn-p:

    $scope.$watch('date', function(val) {
        if (val) {
    
            //Init
            var today = new moment();
            var selectedDate = new moment(val);
    
            if(selectedDate.isBefore(today)){
                $scope.dateErrorMsg = false;
                $scope.newReceiptSaveBtn = "false";
    
            } else {
                $scope.dateErrorMsg = true;
                $scope.newReceiptSaveBtn = "true";
            }
        }
    });
    

    虽然上面的示例侧重于基于您的代码的解决方案,但创建一个像这种方法一样的纯 AngularJS 处理会更好:

    var myApp = angular.module('myApp',[]);
    
    myApp.controller('MyCtrl', function ($scope) {
    
        //Init
        $scope.date  = new moment()._d;
        $scope.error = false;
        
        $scope.validateDate = function () {
        
            //Init
            var today = new moment();
            var selectedDate = new moment($scope.date);
            
            if(selectedDate.isBefore(today)){
                $scope.error = false;
            } else {
                $scope.error = true;
            }
        }
    });
    .error {
      border:1px solid red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
    
    <div ng-app="myApp">
      <div ng-controller="MyCtrl">
        <input type="date" 
               ng-model="date" 
               ng-change="validateDate()" 
               ng-class="{ 'error': error }" />
      </div>
    </div>

    【讨论】:

    • 感谢@lin.. 的回答 :)
    • @User123 很高兴为您提供帮助。
    • 很抱歉这么说,但我无法在 2016 年 3 月 26 日继续进行。得到错误。你能帮我解决这个问题吗
    • @User123 wow m8,感谢您删除勾号。您的问题到底是什么“2016 年 3 月 26 日进一步”?
    • 看看我是否选择了前一年直到 3 月 2 日它工作正常。但如果我选择未来的日期,如 2016 年 3 月 4 日,它将不会接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多