2013-03-12 46 views
0

我試圖計算從X日期到今天的日期已經過去了多少「小時數」。考慮到一天24小時,這很簡單,但是我需要計算每個工作日不同的小時數。根據當天計算不同小時的時間?

我只需要計算週一至週五0600至2000,週六0600至1800以及週日0900至1700之間的小時數。 銀行假期0900至1730不包括聖誕節和節禮日。

例如,如果日期是27/02/2013 12:00:00,那麼大致有9個工作日和2個星期六和2個星期日。因此,這將使總數(假設日期爲12/03/2013 12:00):166小時(126 + 24 + 16),相當於3.9「期間」

這是否有意義?

編輯:我實際上可以簡單地通過考慮日期,計算自上述日期以來有多少個工作日,星期六,星期天和銀行假期,然後減去剛剛提到的天數倍數的小時數?

+0

你關心的開始時間(的一天)或者你只是考慮整個日子?你想用公式或VBA做到這一點嗎?您使用的是哪個版本的Excel? – 2013-03-12 11:13:00

回答

0

我不知道你的週期是什麼意思,但如果你想要的時間,這樣的事情應該做的:

//NOTE: Adjust the order to match the rules priorities 
float hoursOfDay(Date d) { 
    if (isHoliday(d)) 
     return 8.5; 
    elsif (isRegular(d)) 
     return 14; 
    elsif (isSaturday(d)) 
     return ; 
    elsif (isSunday(d)) 
    ...   
} 

的功能是當天類型只是檢查(根據語言,這些功能應該已經在那裏) isSaturday(d)= d.dayOftheWeek == DayOfTheWeek.SUNDAY

然後,你只需要在它們之間迭代:

DateTime d1; 
DateTime d2; 
//NOTE: according to language, d2-d1 is a timespan object 
float hours = 0; 
for (Date d: d2-d1) 
    hours+=hoursOfDay(d); 

convertHoursToPeriods(hours); 
+0

如果這些映射的dayType - >小時數可能發生變化,最好將它們放在地圖對象中或放在帶有自定義值或類似值的枚舉中...... – 2013-03-12 11:08:39

0

使用不同的方法找出它。計算日期之間的天數並乘以小時差

B2是今天的日期,C8是開始日期。

平日

= SUM(INT((WEEKDAY(C8- {2,3,4,5,6})+ $ B $ 2-C8)/ 7))

星期六

= SUM(INT((WEEKDAY(C8-7)+ $ B $ 2-C8)/ 7))

星期日

= SUM(INT((WEEKDAY(C8-1)+ $ B $ 2-C8)/ 7))

我然後可以計算出在工作日,有14個小時我想數。所以平日數乘以14給我我想要的數字。重複其他日子:)

+0

您可以在一個公式中對所有日期都這樣做:'' = SUMPRODUCT(INT((WEEKDAY(C8- {1,2,3,4,5,6,7})+ $ B $ 2-C8)/ 7),{8,14,14,14,14,14, 12})..... .....不考慮假期,但...... – 2013-03-12 11:19:14