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

标签 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;
}

最佳答案

您的问题是

if (myDaysDifference % 14 == 0)

应该不等于

if (myDaysDifference % 14 != 0)

两种方法。

您的逻辑目前是从现在开始查找上一个星期五,然后查看该日期与第一个日期之间的差异是否可以被 14 整除,如果是,则添加 7 天。这是不正确的,因为如果差距可以被 14 整除,那么 myDay 一定是发薪日。如果 myDaysDifference 不能正好除以 14,则只需添加 7,因为这意味着星期五不是发薪日。

关于c# - 确定最近和下一个发薪日(周五交替),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25047349/

相关文章:

c# - 并发运行两次时如何取消循环作业?

python - Pandas :按组计算唯一的日期时间值会给出奇怪的值

python - 组合年、月、周数和迄今为止的日期

c# - 添加 Kinect SDK 作为我的应用程序的先决条件

c# - 如何使用正则表达式拆分字符串

c# - 简单的 XPathNavigator GetAttribute

c# - Android:单击按钮打开新布局并删除当前布局

ios - 无法解析日期

javascript - 日期始终比所需日期小 1

datetime - 导出时的组织模式时间戳格式