종료 날짜가 jQuery를 사용하여 시작 날짜보다 큰지 확인하십시오.


답변:


177

융합을 확장하는 것뿐입니다. 이 확장 방법은 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" }
    }
});

두 개의 텍스트 상자에서 이것을 어떻게 사용합니까?
Cros

1
내 앱에서 종료 날짜를 비워두기 위해 약간 수정해야했지만 이로 인해 대량 처리되었습니다. codeif (value == 0) {true를 반환합니다. } 다른 (/ 잘못된 경우 |! NaN이 / ...code
프랭크 루크

3
버그 경고 : 질문이 날짜에 관한 것임을 알고 있지만이 코드는 광고 된 숫자에 대해서는 작동하지 않습니다. 나는 수정 사항을 포함하는 이유와 방법을 설명 하는 답변 을 추가 했습니다 .
Jon

1
@Cros jQuery.validator.addMethod ( "zip_code_checking", function (value, element) {return jQuery ( '# zip_endvalue'). val ()> jQuery ( '# zip_startvalue'). val ()}, "* 우편 번호 끝 값은 우편 번호 시작 값보다 커야합니다. ");
Balasuresh Asaithambi

이로 인해 Google 크롬에서 오류가 발생합니다. 12보다 작거나 31보다 큰 값을 전달하면 결국 날짜로 파싱되므로 날짜로도 유효성이 검사됩니다. 나는 이것을 두 가지 방법으로 분리해야했지만 (서둘러) 더 적합한 솔루션을 찾고 싶습니다!
sbsatter

84
var startDate = new Date($('#startDate').val());
var endDate = new Date($('#endDate').val());

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

그렇게해야한다고 생각합니다


권리? 감사! 플러그인이 필요하지 않습니다. : P
Vael Victus 2012

1
jQuery.validate는 굉장하지만 좋은 쉽고, 구현
mknopf

고마워 .. 너무 쉬워.
Nimit Joshi

유일한 문제는 예를 들어 2 년에 걸친 날짜 범위가있을 때입니다.
2015

2 년 이내의 날짜 범위 예 : 2015 년 6 월 27 일부터 2016 년 2 월 2 일까지 제대로 확인되었습니다.
Thamarai T

19

파티에 조금 늦었지만 여기는 내 부분

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

14

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>

도움이 되었기를 바랍니다 :-)


나는이 기술이 좋아
wahmal

13

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

이것은 즉 작동하지만 오페라와 FF, 어떤 아이디어에서 작동하도록 할 수 없습니까?
Codded

: 선택한 종료일이 선택한 시작일 이후 인 경우에도 유효성 검사 오류가 발생합니다
Codded

5

텍스트 필드의 날짜 값은 다음과 같은 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/


5

따라서이 규칙은 선택 사항이 필요했고 위의 제안 중 어느 것도 선택 사항이 아닙니다. 메서드를 호출하면 값이 필요하도록 설정하더라도 필요에 따라 표시됩니다.

이것은 내 부름입니다.

  $("#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.');

4

javascript / jquery에서 대부분의 개발자는 날짜 형식으로 변환하지 않고 문자열 인 From & To 날짜 비교를 사용합니다. 날짜를 비교하는 가장 간단한 방법은 현재보다 큽니다.

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

정확한 결과를 얻기 위해 비교하기 전에 항상 시작 및 종료 날짜를 구문 분석하십시오.


이것은 질문에 대한 답을 제공하지 않습니다. 평판 이 충분 하면 모든 게시물댓글 수 있습니다 . 대신 질문자의 설명이 필요하지 않은 답변을 제공하세요 . - 검토에서
Mamun

질문에 대한 해결책입니다. 나는 시도하고 대답했다.
Kunal Brahme

2

나는 Franz가 말한 것을 좋아합니다.

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

2
$(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)
        }
    });
});

또는이 링크를 방문하십시오


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

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

이것이 도움이되기를 바랍니다 :)


0

먼저 split 함수를 사용하여 두 입력 상자의 값을 분할합니다. 그런 다음 동일한 것을 역순으로 연결하십시오. 국가를 연결 한 후 정수로 구문 분석합니다. 그런 다음 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 {

}

이 솔루션의 설명을 추가하세요
월 서니

0

이것은 작동합니다

$.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");


-2

형식이 올바른 YYYY / MM / DD이고 두 필드간에 정확히 동일한 경우 다음을 사용할 수 있습니다.

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

문자열 비교


jquery에서 시작일과 종료일을 어떻게 정의합니까?
입력

나는 그들이 일반 문자열이라고 가정하고 있습니다. $ (# startdate : input) .val () 및 $ (# enddate : input) .val ()
Nadia Alramli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.