2015-06-07 22 views
0

我有一個小問題,我在設計解決方案時遇到了麻煩。如何確定從日期開始的兩週數

我有一個具有以下規則薪資系統:

  1. 與每個支付期交期爲14天之久,週一開始 在週日結束
  2. 發薪日是週四每兩星期在付款期限的最後一天之後。
  3. 支付週期從1到26(或某些年份爲27),其中ONE是財政年度的第一個發薪日,26(或27)是財政年度的最後一個發薪日。
  4. 我們的財政年度運行7月1日至六月30日

已知薪酬兩週開始在25/06/2012和2012年8月7日結束。這段時間的支付日期是12/07/2012。所以我確實有幾個起點。

從任何日期開始,我可以計算出它的支付日期,因爲我有一個已知的起始點。我也可以很容易地計算出它所涉及的財政年度。 SO上的這些問題有很多解決方案。

我現在需要允許我的用戶輸入日期並讓應用程序顯示它所涉及的支付期限。

我正在努力的是如何確定財政年度的哪個支付期(1至26/27)?有任何想法嗎?

+0

年終總是從7月1日開始? –

+0

財政年度始終始於7月1日 – cramar

+0

因此,你永遠不會只有26個時期,總是27. –

回答

1

現在你的用戶輸入一個日期,你可以計算它的支付日期,對不對?讓「payDate」成爲這個支付日期,你想要的是「財政年度的哪兩週支付日期落入,從一開始編號」,對吧?

然後,您首先需要確定的財政年度的開始:

int delta = (payDate - yearBegin).Days; 

最後你得到:

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 period = (delta/14) + 1; 
+0

顯然變得明顯.... Thankyou太多了。 – cramar

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; 
} 
相關問題