2015-02-10 42 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

相關問題