angularjs中的自定义验证比较两个日期

时间:2018-05-26 00:38:37

标签: javascript angularjs validation

我有两个字段hiring_dateexpiry_date 我正在使用角度UI datepicker。 如果招聘日期大于到期日期

,我想验证表格

这是我的代码: 逻辑是可以的,但我如何设置它以形成错误false

<small ng-show="formStep1.expiry_date.$invalid && 
formStep1.expiry_date.$touched " class="errorMsg ">
Please enter valid date (YYYY-MM-DD).</small>

<small 
ng-show="formStep1.expiry_date.$modelValue < formStep1.hiring_date.$modelValue"
class="errorMsg ">
Expiry Date should not be a older than Target Hiring Date.</small>

基于两个输入日期,我得到了真实和错误

formStep1.expiry_date.$modelValue < formStep1.hiring_date.$modelValue

是否可以从视图侧进行验证..?

消息显示正常但我希望字段expiry_date应该是必需的。

我尝试了类似的东西但没有工作:

<input datepicker-options="dateOptions" 
type="text" 
class="form-control" 
ng-model="expiry_date" 
is-open="config2.opened"  
uib-datepicker-popup="yyyy-MM-dd" 
close-text="Close" 
name="expiry_date" 
show-button-bar="false" 
ng-required="formStep1.expiry_date.$modelValue < formStep1.hiring_date.$modelValue ? 'true': 'false'" />

2 个答案:

答案 0 :(得分:1)

我建议使用momentJs进行任何类型的日期操作。汤姆斯科特可以解释你为什么here。无论如何,对于您的特定情况,有一个moment-angular库可以这样使用:

/* controller declaration */.('$scope', 'moment', function($scope, moment) {
    $scope.isDateBefore = function(firstDate, secondDate) {
        return moment(firstDate).isBefore(secondeDate);
    }
})


<small 
    ng-show="isDateBefore(formStep1.expiry_date.$modelValue, formStep1.hiring_date.$modelValue)"
class="errorMsg ">

您可以详细了解isBefore函数on the official momentjs doc

答案 1 :(得分:0)

<span ng-if="formStep1.expiry_date.$modelValue < formStep1.hiring_date.$modelValue ? invalidExp(): ''" ></span>


    $scope.invalidExp = function () {
        $scope.formStep1.expiry_date.$valid = false; 
    }
这个有用了。那么这个更好的解决方案......?