【发布时间】:2022-01-27 09:02:04
【问题描述】:
我的项目确实需要一个计算脚本,它可以在几分钟内为我计算 4 件事。
- 工作日(08.30 - 17.30 之间)的工作时间分配的总分钟数
- 工作日非工作时间分配的总分钟数(08.30 - 17.30 除外)
- 周末工作时间分配的总分钟数(08.30 - 17.30 之间)
- 周末非工作时间分配的总分钟数(08.30 - 17.30 除外)
基本上,我正在创建和使用日程安排 Google 日历实际上但没关系,我手头只有开始结束的日期时间对象,用于日历上的员工并将日期时间范围分配给员工让他们负责在一定的时间范围内接听客户的电话,这个时间范围也可能持续一周、几个小时、几分钟或几天。这里的问题是这些日期范围非常灵活。
我尝试循环遍历 unix 时间戳,为每个循环创建一个 DateTime 对象并检查这 4 件事,但由于我多次锁定计算机,这会占用过多的内存和 CPU。如果事件最多只能持续一天,我将能够在一天中循环数小时,但它们非常灵活,所以我需要一个强大的算法。
例如,时间表如下所示:
Start(DateTime Object) => 2022-01-27 00:00:00
End(DateTime Object) => 2022-01-29 13:30:00
该函数应将这两个对象作为参数,并应创建一个输出,如下图所示。应该和这个类似:
function createReport(DateTime $employeeWorkStart, DateTime $employeeWorkEnd) : array {
...
return [
'weekday_in-working-hours' => XXX,
'weekday_out-working-hours' => XXX,
'weekend_in-working-hours' => XXX,
'weekday_out-working-hours' => XXX,
]
}
所以我需要创建一个每月报告,显示我在日程表中为每位员工分配了多少分钟。
我的工作时间在 08.30 - 17.30 之间,周六和周日被视为周末。 Example Report Output
【问题讨论】:
-
到目前为止你尝试过什么?你被困在哪里了?
-
正如我在描述中所分享的,我尝试循环 unix 时间戳整数(知道这是不可能的,但只是想看看)。还尝试为每个时间表循环播放一天中的几个小时,但后来发现一个事件可能持续超过一天并停止了这个想法。所有其他方法都卡住了,我迷失了遵循脚本的方向。