Javascript 如何根据彼此和当前日期验证两个日期字段?

Javascript 如何根据彼此和当前日期验证两个日期字段?,javascript,html,jquery,Javascript,Html,Jquery,我正在尝试验证HTML表单字段: 开始日期必须早于结束日期 这两个日期都不能在过去 这是我的表格输入: $(文档).ready(函数(){ var dateIsBefore=false; var dateInPast=false; $('end#u date')。在('keyup',function()上{ 如果($('开始日期').val() >肯定优于 KEYUP ——但您也可能要考虑输入事件> 更改< /代码>和输入事件在日期输入时是相同的,我认为使用change事件只增加了一点可读性。

我正在尝试验证HTML表单字段:

  • 开始日期必须早于结束日期

  • 这两个日期都不能在过去

  • 这是我的表格输入:

    $(文档).ready(函数(){
    var dateIsBefore=false;
    var dateInPast=false;
    $('end#u date')。在('keyup',function()上{
    如果($('开始日期').val()<$('结束日期').val()){
    dateIsBefore=true;
    }否则{
    $('#message').html('开始日期不能晚于结束日期').css('颜色','红色');
    dateIsBefore=false;
    }
    });
    $(“#submitRequest”)。单击(函数(e){
    如果(!dateIsBefore){
    e、 预防默认值();
    }
    })
    })
    
    

    提交请求
    您正试图在您的条件下直接比较输入值。这些值是字符串,它们作为字符串进行比较。 要将这些值作为日期进行比较,只需从输入值字符串创建一个新的日期对象,然后进行比较:

     if(new Date($('#start_date').val()) > new Date($('#end_date').val())) {
        alert('End has to be after start');
     }
    
    更进一步,如果条件返回
    true
    ,您可以将输入值重置为
    null
    ,这样您的输入就没有值,而且由于它具有
    required
    属性,因此提交中的附加检查变得多余,可以删除

     if(new Date($('#start_date').val()) > new Date($('#end_date').val())) {
        alert('End has to be after start');
        $(this).val(null);
     }
    
    旁注:


    我宁愿使用
    change
    事件而不是
    keyup
    事件来验证您的输入。在输入有效的日期字符串之前使用
    keyup
    事件并进行检查时,会出现大量不必要的运行,甚至可能出现错误。

    您可以使用
    momentjs
    库,该库在处理日期时间方面很受欢迎

    在代码中,您需要
    set$('#message').html(''如果有效

    $(文档).ready(函数(){
    var dateIsBefore=false;
    var dateInPast=false;
    $('end#u date')。在('keyup',function()上{
    var start_date=时刻($(“#start_date”).val(),“DD/MM/YYYY”);
    var end_date=时刻($('end_date').val(),“DD/MM/YYYY”);
    if(开始日期<结束日期){
    dateIsBefore=true;
    $('#message').html('');
    }否则{
    $('#message').html('开始日期不能晚于结束日期').css('颜色','红色');
    dateIsBefore=false;
    }
    });
    $(“#submitRequest”)。单击(函数(e){
    如果(!dateIsBefore){
    e、 预防默认值();
    }
    })
    })
    
    

    提交请求
    这是否回答了您的问题?我使用日期类型-代码中没有日期类型,只有字符串。您需要转换<代码> $(“yid id”)。()(代码)>日期,然后比较。<代码>更改< /C> >肯定优于<代码> KEYUP ——但您也可能要考虑<代码>输入<代码>事件> <代码>更改< /代码>和<代码>输入<代码>事件在日期输入时是相同的,我认为使用
    change
    事件只增加了一点可读性。