Попробуйте сравнить дату начала и окончания с форматом мм / гггг - PullRequest
0 голосов
/ 03 февраля 2012

Я пишу это с помощью другого пользователя отсюда, но не работаю.

У меня есть два поля, с маскированным вводом здесь> http://digitalbush.com/projects/masked-input-plugin/ в этом формате: мм / гггг

Я хочу сравнить конечную дату, чтобы она была больше начальной, и отключить кнопку отправки, если это не так.Но я всегда хочу для пользователя, они могли бы зарегистрировать форму без указания даты начала или окончания.Так что я просто хочу сравнить эти два поля, когда в них есть 7 символов, и функция должна быть выполнена в этом> ггггмм, потому что с ммгггг они не могут нормально работать.

У вас естьЛюбая идея, чтобы предложить мне?

Заранее спасибо за любую помощь;)

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

Ответы [ 2 ]

0 голосов
/ 03 февраля 2012

Когда 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();
    });

});
0 голосов
/ 03 февраля 2012

Прежде всего, вашему 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;
}
...