在請假前,我們假定,公司的工作時間是 上午: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個時間段有多長(單位為分鐘。)
privatedouble
get2timespan(datetime dt1, datetime dt2, datetime dt3, datetime dt4)
上面的方法是2個時間的交集,一天其實是分上午和下午,共2個,所以我們可以寫乙個獲取一天內,交集多長的函式
publicdouble
getsamedaytimespan(datetime dt1, datetime dt2, datetime base1, datetime base2, datetime base3, datetime base4, datatable table)
else
}
這樣,我們就可以獲取,一天內,使用者請假時長的放上。
(2)請假跨天的情況
請假跨天時,我們需要知道每一天是否是工作日。 這裡,是不是工作日並不完全是否是週六或者週日決定,因為例如國慶節10.1日,不管是否是工作日,都放假的。
所以,我們需要判斷乙個工作日是否是工作日:
publicbool
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表現...