【问题标题】:Try to compare start & end date with mm/yyyy format尝试将开始和结束日期与 mm/yyyy 格式进行比较
【发布时间】:2012-02-25 15:34:08
【问题描述】:

我在其他用户的帮助下从这里写了这篇文章,但没有工作。

我有两个字段,来自此处的 maskedinput > http://digitalbush.com/projects/masked-input-plugin/ 格式为:mm/yyyy

我想比较结束日期​​大于开始日期,如果不是,则禁用提交按钮。但我一直想要用户,他们可以在不通知开始或结束日期的情况下注册表格。 所以我只想比较这两个字段,当它们里面有 7 个字符时, 功能必须在这个 > yyyymm 中完成,因为使用 mmyyyy 他们没有机会正常工作。

你有什么想法可以推荐给我吗?

在此先感谢您的帮助;)

HTML

<form class="blockdate">
    <input name="stardate"type="text" class="date"/>
    <input name="enddate" type="text" />
    <input name="submit" type="submit" class="date"/>
</form>

<div id="msg"></div>

JS

var compareA = getElementsByName("startdate");
var comparen = getElementsByName("enddate");
function compare() {
// Assumes the format mm/yyyy (not mmyyyy, which your example values seem to be in)
var compareA, compareB;
compareA = dateA.substring(3) + dateA.substring(0, 2);
compareB = dateB.substring(3) + dateB.substring(0, 2);
if (compareA > compareB) {
       $('#msg').html('Check Stard & Endate.');
        $(".submit").prop("disabled",true);

}
}


    jQuery(function($) {

         $('.blockdate').submit(function() {
          return compare;
       });

        $(".date").change(function(){
          if(datevalue2.length == 7) {
            compare;
          } else {
            clean();
          }
      });
    });

【问题讨论】:

  • 其中哪一部分不起作用?有什么用吗?您收到错误消息吗?还是什么都没发生?
  • 你好DOK,什么都没有发生,我对JS不是很熟悉

标签: jquery date validation


【解决方案1】:

首先,您的enddate 没有分配给它的date 类。所以你永远不会抓住那个价值。其次,如果您需要颠倒月份年份的顺序,则只需交换子字符串调用:

//         month                   year
compareA = dateA.substring(0, 2) + dateA.substring(3);

//         year                   month
compareA = dateA.substring(3) + dateA.substring(0,2);

最后你应该使用Date 对象来获取一个unix时间戳,它是一个给定日期的真正整数版本,你可以用来比较:

function compare(start, end) {

  var start, 
    end,
    toDate = function(datestr){
        return new Date(parseInt(datestr.substring(3)), parseInt(datestr.substring(0, 2)));
    };

    if(toDate(start).getTime() > toDate(end).getTime()) {
        $('#msg').html('Check Stard & Endate.');
        $(".submit").prop("disabled",true);
        return false;
    }

    return true;
}

【讨论】:

    【解决方案2】:

    正如 prodigitalson 回答的那样,您的代码应该是这样的

    HTML

    <form class="blockdate">
    <input name="stardate"type="text" id="dateA" class="date"/>
    <input name="enddate" type="text" id="dateB" class="date"/>
    <input name="submit" type="submit" value="submit" id="btnOk"/>
    </form>
    <div id="msg"></div>
    

    JS

    function compare(start, end) {
    
        var start, end, toDate = function(datestr) {
            return new Date(parseInt(datestr.substring(3)), parseInt(datestr.substring(0, 2)));
        };
    
        if (toDate(start).getTime() > toDate(end).getTime()) {
            $('#msg').html('Check Stard & Endate.');
            $(".submit").prop("disabled", true);
            return false;
        }
    
        return true;
    }
    
    function clean() {
        $('#msg').html('');
        $("#btnOk").removeAttr("disabled");
    }
    
    $(document).ready(function() {
    
        $('#btnOk').click(function(e) {
            if (!compare()) e.preventDefault();
            return true;
        });
    
        $(".date").bind("keyup", "change", function() {
    
            var startDate = $("#dateA").val();
            var endDate = $("#dateB").val();
    
            if (startDate.length == 7 && endDate.length == 7) compare(startDate, endDate);
            else clean();
        });
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多