评估两个 "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
// ??
}
}
如你所见,我上面的评论是错误的,有九个条件而不是六个。
我正在尝试评估三个日期是在彼此之前还是之后,以及它们是否是今年给定当前的 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
// ??
}
}
如你所见,我上面的评论是错误的,有九个条件而不是六个。