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 个“周期”

这有意义吗?

编辑:我实际上可以通过取所述日期来简单地做到这一点,计算出自所述日期以来有多少个工作日、周六、周日和银行假日,然后减去小时数乘以刚才提到的天数?

4

2 回答 2

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);
于 2013-03-12T11:07:47.150 回答
0

用不同的方法想通了。计算日期之间的天数并将其乘以小时差

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

平日

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

星期六

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

星期日

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

然后我可以计算出在工作日,我想计算 14 个小时。所以工作日数字乘以 14 就得到了我想要的数字。重复其他日子:)

于 2013-03-12T11:14:30.067 回答