Javascript 月份范围仅应在所选月份后的9个月内

Javascript 月份范围仅应在所选月份后的9个月内,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我有两个月和一年的范围。开始和结束范围 如果选择结束日期2016年6月2日开始日期,则应为过去9个月 如果我选择错误,我将收到错误消息。我做了,但它不起作用。请帮助任何人 有效条件: 示例: End Date :sep2016. Start Date :Dec2015 应接受同一月份: End Date :sep2016. Start Date :sep2016 无效条件: 示例: End Date :sep2016. Start Date

我有两个月和一年的范围。开始和结束范围

如果选择结束日期2016年6月2日开始日期,则应为过去9个月

如果我选择错误,我将收到错误消息。我做了,但它不起作用。请帮助任何人

有效条件:

示例:

  End Date    :sep2016.
  Start Date  :Dec2015
应接受同一月份:

  End Date    :sep2016.
  Start Date  :sep2016
无效条件:

示例:

   End Date    :sep2016.
   Start Date  :oct2016
HTMl:

Javascript:

var $monthStart = $('#monthStart'),
    $yearStart  = $('#yearStart'),
    $monthEnd   = $('#monthEnd'),
    $yearEnd    = $('#yearEnd');

$(document).on('change','#monthEnd,#monthStart,#yearEnd,#yearStart', function() {        
  var startM   = parseInt($monthStart.val()),
      endM     = parseInt($monthEnd.val()),
      diffY    = $yearEnd.val() - $yearStart.val(),
      diffM    = $monthEnd.val() - $monthStart.val();

  if ((diffY == 0 && diffM < 0) ||(diffY == 0 && diffM >= 9) ||(diffY == 1 && diffM >= 9) || (diffY < 0) || (diffY > 1) || (diffY == 1 && diffM > -10)) { 
    alert("Selected range is not correct bcoz that range is not within 9 months from back");
  } else {
    alert("Selected range correct bcoz that range is within 9 months from back");
  }
});
试试下面的代码

$(document).ready(function () {
        var $monthStart = $('#monthStart'),
        $yearStart = $('#yearStart'),
        $monthEnd = $('#monthEnd'),
        $yearEnd = $('#yearEnd');

        $(document).on('change', '#monthEnd,#monthStart,#yearEnd,#yearStart', function () {
            if ($monthStart.val() != 'def' && $monthEnd.val() != 'def' && $yearStart.val() != 'def' && $yearEnd.val() != 'def') {
                var startM = parseInt($monthStart.val()),
                endM = parseInt($monthEnd.val()),
                diffY = $yearEnd.val() - $yearStart.val(),
                diffM = $monthEnd.val() - $monthStart.val();
                if (validate(diffY, startM, endM)) {

                    alert("Selected range is not correct bcoz that range is not within 9 months from back");
                }
                else {
                    alert("Selected range correct bcoz that range is within 9 months from back");

                }
            }
        });
        function validate(diffY, startM, endM) {
            var diffM = (endM + (diffY * 12)) - startM;
            alert(endM + (diffY * 12));
            alert(diffY);
            alert(diffM);
            if (diffM > 9 || diffM < 0)
                return true;
            else
                return false;
        }
    });
及 设置起始年选项的值,如下所示

<option selected="selected" value="def">Year</option>

问题是,在填充所有四个输入后,需要检查范围是否正确,并且需要将$yearEnd.val-$yearStart.val转换为整数

$document.on'change',monthEnd,monthStart,yearEnd,yearStart',函数{ 变量$monthStart=$'monthStart', $yearStart=$'yearStart', $monthEnd=$monthEnd', $yearEnd=$'yearEnd'; 如果$monthEnd.val&&$yearEnd.val&&$monthStart.val&&&$yearStart.val&&$yearStart.val{ var diffY=parseInt$yearStart.val-$yearEnd.val, diffM=parseInt$monthStart.val-$monthEnd.val;
如果diffY==0&&diffM>=-9&&diffM=3&&diffM为了简化逻辑,您可以比较从AD开始的总月数。还可以添加验证,验证所有字段在开始时设置:

<option selected="selected" value="def">Year</option>
var $monthStart   = $('#monthStart'),
  $yearStart    = $('#yearStart'),
  $monthEnd     = $('#monthEnd'),
  $yearEnd      = $('#yearEnd');

$(document).on('change','#monthEnd,#monthStart,#yearEnd,#yearStart', function() {
  if([$yearStart,$yearEnd,$monthStart,$monthEnd].some(f => isNaN(f.val())))
    return;
  let diff = ($yearEnd.val()-$yearStart.val())*12 + $monthEnd.val()-$monthStart.val()
  if(diff>=0 && diff<=9)
    alert(`Selected range correct bcoz that range is within 9 months from back: ${diff}`);
  else
    alert(`Selected range is not correct bcoz that range is not within 9 months from back: ${diff}`);
});