종료 날짜 [텍스트 상자]가 시작 날짜 [텍스트 상자]보다 큰지 jQuery에서 어떻게 확인 / 확인합니까?
답변
융합을 확장하는 것뿐입니다. 이 확장 방법은 jQuery 유효성 검사 플러그인을 사용하여 작동합니다. 날짜와 숫자를 확인합니다.
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.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 ()에서 10 진수 유효성 검사에 제공된 우수한 방법을 사용하여 입력이 실제로 숫자인지 확인했습니다 .
결국 코드는 다음과 같습니다.
$.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의 Date 객체에는 parse ()-Method가 있지만 미국 날짜 형식 (YYYY / MM / DD) 만 지원합니다. 유닉스 시대가 시작된 이후의 밀리 초를 반환하므로 값을> 또는 <와 간단히 비교할 수 있습니다.
다른 형식 (예 : ISO 8661)을 원하면 정규식이나 무료 date.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()
My addMethod
는 Mike E.의 최고 등급 답변만큼 강력하지는 않지만 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.');