确定最近和下一个发薪日(周五交替)

时间:2014-07-30 21:31:48

标签: c# datetime

我非常接近让这个工作,并希望这里的人可以帮助将球推到山顶。在C#中,我需要从今天的日期开始获取最近的发薪日和下一个发薪日(并最终将其扩展到公司的历史中找到任何支付日期)。发薪日每隔一个星期五发生。我使用历史记录中的基准日期来查找我的工资日期。

我的假设(请纠正,如果我错了)是我应该总是将我的支付日期除以14.如果我不能,那么我必须在非工资周。

这是我到目前为止所做的:

public DateTime GetNextPayDay()
{
    DateTime myNow = DateTime.Now;
    string myDay = myNow.DayOfWeek.ToString();
    while (myDay != "Friday")
    {
        myNow = myNow.AddDays(1);
        myDay = myNow.DayOfWeek.ToString();
    }
    DateTime mySeedDate = DateTime.Parse("01/02/1970");
    TimeSpan myTimeSpan = myNow.Subtract(mySeedDate);
    int myDaysDifference = myTimeSpan.Days;
    if (myDaysDifference % 14 == 0) // Problem is here
    {
        myNow = myNow.AddDays(7);
    }

    return myNow;
}

public DateTime GetLastPayDay()
{
    DateTime myNow = DateTime.Now;
    string myDay = myNow.DayOfWeek.ToString();
    while (myDay != "Friday")
    {
        myNow = myNow.AddDays(-1);
        myDay = myNow.DayOfWeek.ToString();
    }

    DateTime mySeedDate = DateTime.Parse("01/02/1970");
    TimeSpan myTimeSpan = myNow.Subtract(mySeedDate);
    int myDaysDifference = myTimeSpan.Days;
    if (myDaysDifference % 14 == 0) // Problem is here
    {
        myNow = myNow.AddDays(-7);
    }

    return myNow;
}

1 个答案:

答案 0 :(得分:4)

您的问题是

if (myDaysDifference % 14 == 0)

应该是不相等的

if (myDaysDifference % 14 != 0)

两种方法。

您的逻辑目前正在查找上一个星期五,然后查看该逻辑与第一个日期之间的差异是否可以被14整除,如果是这样,您将为其添加7天。这是不正确的,好像差距可被14整除,那么myDay必须是发薪日。如果myDaysDifference 没有完全除以14,您只想添加7,因为这意味着您的星期五不是付薪日。