2015-02-10 53 views
0

我试图评估三个日期是否之前或之后对方,如果他们也都是今年鉴于目前DD-MM评估两个“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

我希望这是有道理的,因为我很困难

+0

什么情况下有效?今天之前先付款+今天前付款吗?今天先付后付款+今天前付款吗?今天等于firstpayment和今天最后付款之前?拼写出来是因为你的IF只检查六种可能的条件之一,然后把其他五个条件倾倒到ELSE中。 – James 2015-02-10 23:49:50

+0

好问题......如果今天是'''10-02''',第一个付款是'''18-01''',secondPayment是'''18-07''',那么条件评估为真,所以lastInterestPayment ='''18-01-2015'''和nextInterestPayment ='''18-07-2015''' – 2015-02-10 23:53:00

回答

1

我觉得需要弄清楚逻辑更好 - 或许这可以浓缩但在这里是一个完整的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 
    // ?? 
    } 
} 

正如你可以看到我上面的评论是错误的,有九个条件不是六个。

+0

这让我到最后的地方,感谢您的回应和指导。我最终用''''console.log()'''语句来处理每个条件并将其映射。 – 2015-02-11 17:21:35

1

你可以只评估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/

+0

感谢您的回答,考虑到上面的代码,您会在哪里处理这个条件? – 2015-02-10 23:48:21

+0

我举了两个例子,一个是基于我给出的第一个答案,另一个是试图简化问题的例子。我假设你总是想订购日期,如'lastInterestPayment(firstPayment) - > today - > nextInterestPayment(secondPayment)' – 2015-02-11 00:00:49

+0

再次感谢,我认为你很接近,但如果你使用'''28-04''的值'对于firstPayment和'''28-10''' for secondPayment,你会注意到它正在把'''28-04'''作为最后付款和'''28-10'''作为下一个在哪里事实恰恰相反。 – 2015-02-11 00:02:28

相关问题