Відповіді:
Просто розширюючи відповідь на спалах. цей метод розширення працює з використанням плагіна 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" }
}
});
code
if (значення == 0) {return true; } else if (! / Недійсний | NaN / ...code
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.validate.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")
це, очевидно, протилежний бажаному ефекту).
Тому після розгляду я змінив код, щоб надати пріоритет шляху "цифри" через шлях "дати" і підтвердив, що введення дійсно є числовим, відмінним методом, передбаченим у Валідації десяткових чисел у 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's .val ()
var datestr1 = $('#datefield1-id').val();
var datestr2 = $('#datefield2-id').val();
Я настійно рекомендую проаналізувати рядки дати, перш ніж порівнювати їх. Об'єкт Date Javascript має синтаксичний аналіз () - метод, але він підтримує лише формати дати США (РРР / ММ / DD). Він повертає мілісекунди з початку епохи unix, тому ви можете просто порівняти свої значення з> або <.
Якщо вам потрібні різні формати (наприклад, ISO 8661), вам потрібно вдатися до регулярних виразів або до безкоштовної бібліотеки date.js.
Якщо ви хочете бути надзвичайно захищеними користувачами, замість текстових полів ви можете використовувати jquery ui datapickers. Існує варіант вибору дати, який дозволяє вводити діапазони дат:
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 для примусового вибору дати. Якщо хтось може сказати мені, як переконатися, що дати є цифрами, і метод має бути необов'язковим, але це було б чудово, але наразі цей метод працює для мене:
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.');
У JavaScript / jquery більшість розробників використовує порівняння «Від дати та дати», яке є рядковим, без перетворення у формат дати. Найпростіший спосіб порівняння за датою - більший, ніж на сьогоднішній день.
Date.parse(fromDate) > Date.parse(toDate)
Завжди розбирайте від та до дати перед порівнянням, щоб отримати точні результати
Мені подобається те, що сказав Франц, тому що це я використовую: 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});
});
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'));
}
Сподіваюся, це допоможе :)
Спочатку ви розділите значення двох вхідних вікон за допомогою функції розділення. потім накресліть те саме у зворотному порядку. після стислої нації розберіть його на ціле число. потім порівняйте два значення в операторі if. напр.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 {
}
це має працювати
$.validator.addMethod("endDate", function(value, element) {
var startDate = $('#date_open').val();
return Date.parse(startDate) <= Date.parse(value) || value == "";
}, "* End date must be after start date");
Якщо формат гарантовано правильний YYYY / MM / DD і однаковий між двома полями, ви можете використовувати:
if (startdate > enddate) {
alert('error'
}
Як рядкове порівняння