2013-10-24 60 views
0

我有要求僅在工作日發送電子郵件。要求是在天數後向用戶發送升級電子郵件,並在週日打折星期六&。週末折扣並查找日期的平日數量?

例如,如果第一次升級是在2013年10月22日發送的,19天后如果需要發送下一次升級,那麼我需要打折所有周末,並且應該在18-Nov- 2013。 (這會打折所有的週末,只需要19個工作日併發送電子郵件)。

有人可以分享一個邏輯,我怎麼能做到這一點?在堆疊流程中,我可以看到帖子找到兩個給定日期之間的週末。但在我的情況下,我需要在週末打折,並在一個工作日內發送電子郵件給予天數。

問候, 斯利拉姆

回答

0

僞代碼(我讓你把它作爲一個練習翻譯成C#)。它假定開始日期是一個星期。

function FindTheNextWeekDayAfter (date today, int workingDays) returns date 
    result = today; 
    while workingDays>0 
    result = result.AddDays(1) 
    if result.IsWeekDay() && ! result.IsHoliday() 
     workingDays-- 

    return result 

這可以實現爲DateTime擴展。

+0

它沒有工作!我在C#下面有相同的代碼。'while while(selectedDays> 0) { newDate = escalationDate.AddDays(1); if(newDate.DayOfWeek!= DayOfWeek.Saturday || newDate.DayOfWeek!= DayOfWeek.Sunday) selectedDays ++; }' –

+0

'if(newDate.DayOfWeek!= DayOfWeek.Saturday || newDateOfWeek!= DayOfWeek.Sunday)' - 這將永遠是真實的。你可能打算使用'&&'。 – Corak

+0

因此,當我用&&調試時,這個邏輯也不起作用:( –

0

這段代碼工作!

private DateTime GetNextEscalationDate(DateTime lastEscalationDate, int elapsedDays) 
{ 
int count = 0; 
int j = elapsedDays; 

for (int i = 1; i <= j; i++) 
{ 
    if ((lastEscalationDate.AddDays(i).DayOfWeek == DayOfWeek.Saturday) || 
    (lastEscalationDate.AddDays(i).DayOfWeek == DayOfWeek.Saturday)) 
    { 
     count += 2; 
     j += 2; 
    } 
} 
DateTime weekendDiscountedDate = lastEscalationDate.AddDays(elapsedDays + count); 
return weekendDiscountedDate; 

}