0

我要求只在工作日发送电子邮件。要求是在几天后向用户发送升级电子邮件,条件是周六和周日打折。

例如,如果第一次升级是在 2013 年 10 月 22 日发送的,如果需要在 19 天后发送下一次升级,那么我需要在所有周末都打折,并且应该在 2013 年 11 月 18 日发送电子邮件。(这个折扣所有的周末,只需要 19 个工作日并发送电子邮件)。

有人可以分享我如何实现这一目标的逻辑吗?在堆栈溢出中,我可以看到帖子以查找两个给定日期之间的周末。但就我而言,我需要打折周末并仅在工作日发送电子邮件以获得给定的天数。

问候,斯里拉姆

4

2 回答 2

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;

}

于 2013-10-24T08:36:32.717 回答
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 扩展来实现。

于 2013-10-24T06:27:10.090 回答