我正在计算从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 :(得分: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);
答案 1 :(得分: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可以得到我想要的数字。重复其他日子:)