评估两个 "DD-MM" 字符串作为日期并计算之前或之后

Evaluate two "DD-MM" strings as date and calculate before or after

我正在尝试评估三个日期是在彼此之前还是之后,以及它们是否是今年给定当前的 DD-MM

示例

var firstPayment = moment('18-01', 'DD-MM');
var secondPayment = moment('18-07', 'DD-MM');
var todayDate = moment(10-02, 'DD-MM');


if(todayDate.isAfter(firstPayment) && todayDate.isBefore(secondPayment)) {
     lastInterestPaymentDate.text(firstPayment.add(-1,'years').format('DD MMM YYYY'));
     nextInterestPaymentDate.text(secondPayment.format('DD MMM YYYY'));
} else {
     nextInterestPaymentDate.text(secondPayment.add(1,'years').format('DD MMM YYYY'));
     lastInterestPaymentDate.text(firstPayment.format('DD MMM YYYY')); //add(1, 'years').
}

问题是,如果语句评估为真,则日期顺序正确,但是如果 firstPayment 为 18-01,则输出日期应为 18-01-2015,但如果 firstPayment 为 18-11,则它应该输出为 18-11-2014

我希望这是有道理的,因为我真的被困住了

您可以只评估 firstPayment 和 todayDate 的月份部分,并决定是否应减去 1 年。

if (todayDate.month() < firstPayment.month())
    firstPayment.add(-1, 'years');

编辑:

再详细一点,如果我理解你的意思,我会检查你的 else 语句中的月份。请检查这个 jsFiddle:http://jsfiddle.net/fabio_silva/7kjfakzy/

同时我做了一个替代版本,我认为它更符合你的需要:http://jsfiddle.net/fabio_silva/m826med2/

我认为需要更好地理解逻辑 - 也许这可以被压缩,但这里有一个完整的 if 块,其中包含您需要充实的所有可能条件。

if(todayDate.isAfter(firstPayment)) {
  if (todayDate.isBefore(secondPayment)) {
    lastInterestPaymentDate.text(firstPayment.add(-1,'years').format('DD MMM YYYY'));
    nextInterestPaymentDate.text(secondPayment.format('DD MMM YYYY'));
  } else if (todayDate.isAfter(secondPayment)) {
    // ??
  } else {  // todayDate equals secondPayment
    // ??
  }
} else if (todayDate.isBefore(firstPayment)) {
  if (todayDate.isBefore(secondPayment)) {
    // ??
  } else if (todayDate.isAfter(secondPayment)) {
    // ??
  } else {  // todayDate equals secondPayment
    // ??
  }    
} else {  // todayDate is equal to firstPayment
  if (todayDate.isBefore(secondPayment)) {
    // ??
  } else if (todayDate.isAfter(secondPayment)) {
    // ??
  } else {  // todayDate equals secondPayment
    // ??
  }
}

如你所见,我上面的评论是错误的,有九个条件而不是六个。