Проверьте, что дата окончания больше, чем дата начала с помощью jQuery



Как проверить / проверить в jQuery, больше ли дата окончания [текстовое поле], чем дата начала [текстовое поле]?

478   14  

14 ответов:

просто расширяя ответ слияния. этот метод расширения работает с помощью плагина jQuery validate. Он будет проверять даты и цифры

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}.');

использовать:

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

или

$("form").validate({
    rules: {
        EndDate: { greaterThan: "#StartDate" }
    }
});
var startDate = new Date($('#startDate').val());
var endDate = new Date($('#endDate').val());

if (startDate < endDate){
// Do something
}

что должен сделать это, я думаю,

немного опоздал на вечеринку, но вот моя часть

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

вот это:

var from = $("#from").val();
var to = $("#to").val();

if(Date.parse(from) > Date.parse(to)){
   alert("Invalid Date Range");
}
else{
   alert("Valid date Range");
}

ссылка jquery.утверждать.js и jquery-1.2.6.js. Добавьте класс startDate в текстовое поле Дата начала. Добавьте класс endDate в текстовое поле Дата окончания.

добавьте этот блок скрипта на свою страницу: -

<script type="text/javascript">
    $(document).ready(function() {
        $.validator.addMethod("endDate", function(value, element) {
            var startDate = $('.startDate').val();
            return Date.parse(startDate) <= Date.parse(value) || value == "";
        }, "* End date must be after start date");
        $('#formId').validate();
    });
</script>

надеюсь, что это помогает :-)

Я просто возился с danteuno это и обнаружил, что в то время как благими намерениями, к сожалению, он сломан на нескольких браузерах, которые не IE. Это потому, что IE будет довольно строго относиться к тому, что он принимает в качестве аргумента к Date конструктор, но другие не будут. Например, Chrome 18 дает

> new Date("66")
  Sat Jan 01 1966 00:00:00 GMT+0200 (GTB Standard Time)

это приводит к тому, что код принимает путь "сравнить даты", и все это идет вниз оттуда (например,new Date("11") больше new Date("66") и это, очевидно, противоположно желаемому эффекту).

поэтому после рассмотрения я изменил код, чтобы дать приоритет пути "numbers" над путем "dates" и проверить, что вход действительно числовой с отличным методом, предоставленным в проверка десятичных чисел в JavaScript-IsNumeric ().

в конце концов, код становится:

$.validator.addMethod(
    "greaterThan",
    function(value, element, params) {
        var target = $(params).val();
        var isValueNumeric = !isNaN(parseFloat(value)) && isFinite(value);
        var isTargetNumeric = !isNaN(parseFloat(target)) && isFinite(target);
        if (isValueNumeric && isTargetNumeric) {
            return Number(value) > Number(target);
        }

        if (!/Invalid|NaN/.test(new Date(value))) {
            return new Date(value) > new Date(target);
        }

        return false;
    },
    'Must be greater than {0}.');

значения дат из текстовых полей могут быть получены с помощью jquery .функция val() метод, как

var datestr1 = $('#datefield1-id').val();
var datestr2 = $('#datefield2-id').val();

Я настоятельно рекомендую проанализировать строки даты перед их сравнением. Объект даты Javascript имеет метод parse () - Method, но он поддерживает только форматы дат США (YYYY/MM/DD). Он возвращает миллисекунды с начала эпохи unix, поэтому вы можете просто сравнить свои значения с > или <.>

Если вы хотите разные форматы (например, ISO 8661), вам нужно прибегнуть к регулярные выражения или свободная дата.библиотека js.

Если вы хотите быть суперпользователем, вы можете использовать jQuery ui datepickers вместо текстовых полей. Существует вариант datepicker, который позволяет вводить диапазоны дат:

http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/

поэтому мне нужно, чтобы это правило было необязательным, и ни одно из приведенных выше предложений не является необязательным. Если я вызываю метод, он показывает, как требуется, даже если я установил его в нужное значение.

Это мой вызов:

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

мой addMethod не так надежен, как лучший ответ Майка э., Но я использую jQueryUI datepicker для принудительного выбора даты. Если кто-то может сказать мне, как убедиться, что даты являются числами и имеют метод быть необязательным, что было бы здорово, но сейчас это метод работает для меня:

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.');

Мне нравится то, что сказал Франц, потому что это то, что я использую :P

var date_ini = new Date($('#id_date_ini').val()).getTime();
var date_end = new Date($('#id_date_end').val()).getTime();
if (isNaN(date_ini)) {
// error date_ini;
}
if (isNaN(date_end)) {
// error date_end;
}
if (date_ini > date_end) {
// do something;
}
$(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)
        }
    });
});

или посетите этот ссылке

jQuery('#from_date').on('change', function(){
    var date = $(this).val();
    jQuery('#to_date').datetimepicker({minDate: date});  
});

в javascript / jquery большинство разработчиков использует сравнение от & до даты, которое является строкой, без преобразования в формат даты. Самый простой способ сравнить от даты больше, чем на сегодняшний день.

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

всегда анализировать от и до даты перед сравнением, чтобы получить точные результаты

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'));
}

надеюсь, это поможет :)

сначала вы разделяете значения двух входных полей с помощью функции split. затем соедините то же самое в обратном порядке. после конкат нации разобрать его на целое число. затем сравнить два значения в случае, если заявление. например.1 > 20-11-2018 2 > 21-11-2018

после разделения и объединения новых значений для сравнения 20181120 и 20181121 после этого сравнить то же самое.

var date1 = $('#datevalue1').val();
var date2 = $('#datevalue2').val();
var d1 = date1.split("-");
var d2 = date2.split("-");

d1 = d1[2].concat(d1[1], d1[0]);
d2 = d2[2].concat(d2[1], d2[0]);

if (parseInt(d1) > parseInt(d2)) {

    $('#fromdatepicker').val('');
} else {

}

если формат гарантированно будет правильным гггг / ММ / ДД и точно таким же между двумя полями, то вы можете использовать:

if (startdate > enddate) {
   alert('error'
}

как сравнение строк

Comments

    Ничего не найдено.