Validate that end date is greater than start date with jQuery

前端 未结 15 1655
隐瞒了意图╮
隐瞒了意图╮ 2020-11-22 13:14

How do I check/validate in jQuery whether end date [textbox] is greater than start date [textbox]?

相关标签:
15条回答
  • 2020-11-22 13:30
    $(document).ready(function(){
       $("#txtFromDate").datepicker({
            minDate: 0,
            maxDate: "+60D",
            numberOfMonths: 2,
            onSelect: function(selected) {
              $("#txtToDate").datepicker("option","minDate", selected)
            }
        });
    
        $("#txtToDate").datepicker({
            minDate: 0,
            maxDate:"+60D",
            numberOfMonths: 2,
            onSelect: function(selected) {
               $("#txtFromDate").datepicker("option","maxDate", selected)
            }
        });
    });
    

    Or Visit to this link

    0 讨论(0)
  • 2020-11-22 13:33

    In javascript/jquery most of the developer uses From & To date comparison which is string, without converting into date format. The simplest way to compare from date is greater then to date is.

    Date.parse(fromDate) > Date.parse(toDate)
    

    Always parse from and to date before comparison to get accurate results

    0 讨论(0)
  • 2020-11-22 13:37
    function endDate(){
        $.validator.addMethod("endDate", function(value, element) {
          var params = '.startDate';
            if($(element).parent().parent().find(params).val()!=''){
               if (!/Invalid|NaN/.test(new Date(value))) {
                   return new Date(value) > new Date($(element).parent().parent().find(params).val());
                }
           return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) > parseFloat($(element).parent().parent().find(params).val())) || value == "";              
          }else{
            return true;
          }
          },jQuery.format('must be greater than start date'));
    
    }
    
    function startDate(){
                $.validator.addMethod("startDate", function(value, element) {
                var params = '.endDate';
                if($(element).parent().parent().parent().find(params).val()!=''){
                     if (!/Invalid|NaN/.test(new Date(value))) {
                      return new Date(value) < new Date($(element).parent().parent().parent().find(params).val());
                }
               return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) < parseFloat($(element).parent().parent().find(params).val())) || value == "";
                     }
                            else{
                         return true;
    }
    
        }, jQuery.format('must be less than end date'));
    }
    

    Hope this will help :)

    0 讨论(0)
  • 2020-11-22 13:39
    var startDate = new Date($('#startDate').val());
    var endDate = new Date($('#endDate').val());
    
    if (startDate < endDate){
    // Do something
    }
    

    That should do it I think

    0 讨论(0)
  • 2020-11-22 13:42

    So I needed this rule to be optional and none of the above suggestions are optional. If I call the method it is showing as required even if I set it to needing a value.

    This is my call:

      $("#my_form").validate({
        rules: {
          "end_date": {
            required: function(element) {return ($("#end_date").val()!="");},
            greaterStart: "#start_date"
          }
        }
      });//validate()
    

    My addMethod is not as robust as Mike E.'s top rated answer, but I'm using the JqueryUI datepicker to force a date selection. If someone can tell me how to make sure the dates are numbers and have the method be optional that would be great, but for now this method works for me:

    jQuery.validator.addMethod("greaterStart", function (value, element, params) {
        return this.optional(element) || new Date(value) >= new Date($(params).val());
    },'Must be greater than start date.');
    
    0 讨论(0)
  • 2020-11-22 13:44

    Just expanding off fusions answer. this extension method works using the jQuery validate plugin. It will validate dates and numbers

    jQuery.validator.addMethod("greaterThan", 
    function(value, element, params) {
    
        if (!/Invalid|NaN/.test(new Date(value))) {
            return new Date(value) > new Date($(params).val());
        }
    
        return isNaN(value) && isNaN($(params).val()) 
            || (Number(value) > Number($(params).val())); 
    },'Must be greater than {0}.');
    

    To use it:

    $("#EndDate").rules('add', { greaterThan: "#StartDate" });
    

    or

    $("form").validate({
        rules: {
            EndDate: { greaterThan: "#StartDate" }
        }
    });
    
    0 讨论(0)
提交回复
热议问题