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