如何从日期确定两周的数字

时间:2015-06-07 07:03:05

标签: c# date

我有一个琐碎的问题,我无法构思解决方案。

我的工资单系统有以下规则:

  1. 与每个支付期相关的支付期限为14天 周一和周日结束
  2. 发薪日是在付款期最后一天后的星期四每两周发布一次。
  3. 支付期为1至26(或某些年份为27),其中ONE为本财政年度的第一个发薪日,26(或27)为本财政年度的最后一个发薪日。
  4. 我们的财政年度为7月1日至6月30日
  5. 已知的付费两周于2012年6月25日开始,于2012年7月8日结束。这一时期的发薪日是12/07/2012。所以我确实有一些起点。

    从任何日期开始,我都可以计算出它的支付日期,因为我有一个已知的起点。我也可以很容易地计算它所涉及的财政年度。在SO上有很多解决这些问题的方法。

    我现在需要允许我的用户输入日期并让应用程序显示与其相关的支付期。

    我正在努力的是如何确定本财政年度的薪酬期(1至26/27)?有任何想法吗?

2 个答案:

答案 0 :(得分:1)

现在您的用户输入了一个日期,您可以计算其付款日期,对吗?让“payDate”成为这个支付日期,你想要的是“财政年度的哪两周确实支付日期,从一个开始编号”,对吗?

然后,您首先需要确定财政年度的开始:

DateTime yearBegin;
if (payDate.Month >= 7)
  yearBegin = new DateTime(payDate.Year, 7, 1);
else
  yearBegin = new DateTime(payDate.Year - 1, 7, 1);

通过这个,您可以计算payDate和yearBegin之间的天数:

int delta = (payDate - yearBegin).Days;

最后你会得到答案:

int period = (delta / 14) + 1;

答案 1 :(得分:0)

我知道任何一年的第一个发薪日从不同的一天开始,总是匹配14天的整个时段。如果是这种情况,您可以尝试以下代码:

static DateTime InitialDate = new DateTime(2012, 06, 25);
private static int PayPeriod(DateTime inputDate)
{
    int periodStartDay = (inputDate - InitialDate).Days % 14 + 1;
    int periodStartMonth = 07;
    int periodStartYear = inputDate.Month >= 7 ? inputDate.Year : inputDate.Year - 1;
    DateTime periodStartDate = new DateTime(periodStartYear, periodStartMonth, periodStartDay);
    int payPeriod = (inputDate - periodStartDate).Days / 14 + 1;
    return payPeriod;
}