啟明星請假系統裡,計算工作日的實現

2021-09-06 16:29:15 字數 1605 閱讀 3205

在請假前,我們假定,公司的工作時間是 上午:8:00--12:00 下午13:00--17:00。 中間乙個小時是午飯時間。

(1)首先考慮當天請假情況,例如今天是2014-6-25日。

假設使用者請假是從  2014-6-25 9:00:00 到 2014-6-25 16:00:00

那麼,如果人工算的話,應該是分為兩端:

(a)計算 9:00--12:00的時段(3個小時)

(b)計算13:00--16:00的時段(3個小時)

也就是,使用者其實請假是3+3 共6個小時。

但是使用者請假時間是任意選擇的,他可能選擇從7:00--16:00,那麼7:00--8:00這乙個小時,是不算請假的。

如果我們把使用者的請假時代用ab表示,作息上午時間用cd表示,作息下午時間用ef表示

那麼一天的請假其實是計算2個時間段的交集,也就是請假時長= ab∩cd+ab∩ef 

下面考慮ab∩cd也就是求2個時間段的交集,這需要考慮六種情況:(具體略,高中高數求集合交集時常用的方法。)

為此,我們可以寫出乙個方法:get2timespan 獲取2個時間段有多長(單位為分鐘。)

private

double

get2timespan(datetime dt1, datetime dt2, datetime dt3, datetime dt4)

上面的方法是2個時間的交集,一天其實是分上午和下午,共2個,所以我們可以寫乙個獲取一天內,交集多長的函式

public

double

getsamedaytimespan(datetime dt1, datetime dt2, datetime base1, datetime base2, datetime base3, datetime base4, datatable table)

else

}

這樣,我們就可以獲取,一天內,使用者請假時長的放上。

(2)請假跨天的情況

請假跨天時,我們需要知道每一天是否是工作日。 這裡,是不是工作日並不完全是否是週六或者週日決定,因為例如國慶節10.1日,不管是否是工作日,都放假的。

所以,我們需要判斷乙個工作日是否是工作日:

public

bool

isworkday(datetime dt, datatable table)

if (dt.dayofweek == dayofweek.saturday || dt.dayofweek ==dayofweek.sunday)

return

true

; }

這裡,以使用者自定義的日期優先順序最高。如果不存在使用者自定義的,則自動使用預設的日期。

在啟明星請假系統裡,是一天天的進行判斷跨天請假的,如果是工作日,直接返回當天時長,否則返回為0

int day = (odt2 -odt1).days; 

for (int i = 0; i <= day; i++)

else

else

else

} } }}

return totalminiter;

啟明星員工請假系統appform v8 8

此系統是為了解決如下的需求而開發 需求如下 1.要有加班和請假兩種申請.2.加班和請假其實都分兩部分,第一部分是管理人員 有電腦的 第二是所有1線的操作人員 他們沒有電腦 3.初始化的時候要有匯入的介面,能把excel的資料匯入到系統裡,部門,組別,姓名,性別,剩餘假期等 4.在整合域 active...

啟明星請假單加班單管理系統

啟明星請假單加班單管理系統使用者需求說明書 此系統時為了解決如下的需求而開發 需求如下 1.要有加班和請假兩種申請.2.加班和請假其實都分兩部分,第一部分是管理人員 有電腦的 第二是所有1線的操作人員 他們沒有電腦 3.初始化的時候要有匯入的介面,能把excel的資料匯入到系統裡,部門,組別,姓名,...

啟明星系統字型的演變

啟明星系統採用了bootstrap樣式。bootstrap對英文本型支援的很好。但是中文字型,對於採用chrome核心的瀏覽器而言 如360,獵豹,搜狗等瀏覽器 字型比較難看。如下圖,顯示的預設採用bootstrap預設字型 ie和chrome顯示的效果。從中可以看到,英文本型ie和chrome表現...