打折周末,并从某个日期中找出工作日的数量
本文关键字:工作日 日期 周末 | 更新日期: 2023-09-27 18:36:36
我要求只在工作日发送电子邮件。要求是在天数后向用户发送升级电子邮件,条件是周六和周日打折。
例如,如果第一次升级是在 2013 年 10 月 22 日发送的,而在 19 天后,如果需要发送下一次升级,那么我需要对所有周末打折,并应在 2013 年 11 月 18 日发送电子邮件。(这打折了所有周末,只需要19个工作日并发送电子邮件)。
有人可以分享我如何实现这一目标的逻辑吗?在堆栈流中,我可以看到帖子以查找两个给定日期之间的周末。但就我而言,我需要在周末打折,并且仅在工作日发送电子邮件以达到给定的天数。
问候斯里拉姆
伪代码(我把它留给你把它翻译成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
这可以作为日期时间扩展实现。
这段代码有效!!
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;
}