0

我正在寻找一种方法来检查第一个选择菜单的日期是否在第二个之前。任何帮助将不胜感激。谢谢。

<select id="outbound_month_and_year">
<option selected="" value="-1">Departing</option>
<option selected="" value="NOV2013">November 2013</option>
<option value="DEC2013">December 2013</option>
<option value="JAN2014">January 2014</option>
<option value="FEB2014">February 2014</option>
<option value="MAR2014">March 2014</option>
<option value="APR2014">April 2014</option>
<option value="MAY2014">May 2014</option>
<option value="JUN2014">June 2014</option>
<option value="JUL2014">July 2014</option>
<option value="AUG2014">August 2014</option>
<option value="SEP2014">September 2014</option>
<option value="OCT2014">October 2014</option>
</select>

<select id="return_month_and_year">
<option selected="" value="-1">just one way</option>
<option value="NOV2013">November 2013</option>
<option value="DEC2013">December 2013</option>
<option value="JAN2014">January 2014</option>
<option value="FEB2014">February 2014</option>
<option value="MAR2014">March 2014</option>
<option value="APR2014">April 2014</option>
<option value="MAY2014">May 2014</option>
<option value="JUN2014">June 2014</option>
<option value="JUL2014">July 2014</option>
<option value="AUG2014">August 2014</option>
<option value="SEP2014">September 2014</option>
<option value="OCT2014">October 2014</option>
</select>
4

3 回答 3

0

你可以这样尝试

$('select').on ('change', function () {
var date1 = new  Date($('#outbound_month_and_year').val());
    var date2 = new  Date($('#return_month_and_year').val());
    if (date1.getTime() < date2.getTime() ) {
    alert("date1 is less than date2");
    }
});

JSFiddle这适用于 chrome,但我认为它可能具有跨浏览器兼容性。

于 2013-11-06T13:28:56.617 回答
0

尝试这个

$('select').on ('change', function () {
if($('#outbound_month_and_year').val()!=-1 && $('#return_month_and_year').val()!=-1){
    var date1 = new  Date($('#outbound_month_and_year').val());
    var date2 = new  Date($('#return_month_and_year').val());
    if (date1.getTime() < date2.getTime() ) {
     // show message
    }
}
});
于 2013-11-06T13:32:02.200 回答
0

因为您说您无法更改 HTML,您需要使用字符串操作将日期转换为可以解析的格式。这是丑陋的代码,但它有效:

var $out = $('#outbound_month_and_year'),
    $in = $('#return_month_and_year');

$out.add($in).on('change', function() {
    var outDate = getDate($out.val()),
        inDate = getDate($in.val());

    if (outDate && inDate) {
        if (outDate < inDate) {
            $('#result').text('Outbound is before');
        }
        else if (outDate > inDate) {
            $('#result').text('Outbound is after');
        }
        else {
            $('#result').text('Outbound is the same');
        }
    }
});

function getDate(val) {
    if (val == -1)
        return false;

    var day = '01';
    var month = val.substr(0, 3);
    var year = val.substr(-4);
    return new Date(day + ' ' + month + ' ' + year);
}

示例小提琴

请注意,此解决方案非常脆弱,因为它很容易被select正在更改的值的格式破坏。如果发生这种情况,您需要getDate()相应地修改函数。

于 2013-11-06T13:37:32.367 回答