Php 如何计算和显示参与者可用性重叠的实际时间
如何计算和显示团队中参与者可用性重叠的实际时间。例如,这有3个人,他们有不同的可用性 开始时间-结束时间 [人员1]=>凌晨1:30-5:00 [人员1]=>5:00pm-11:00pm [人员2]=>12:00am-11:30am [人员3]=>凌晨2:00-晚上11:30 这是另一个数组Php 如何计算和显示参与者可用性重叠的实际时间,php,Php,如何计算和显示团队中参与者可用性重叠的实际时间。例如,这有3个人,他们有不同的可用性 开始时间-结束时间 [人员1]=>凌晨1:30-5:00 [人员1]=>5:00pm-11:00pm [人员2]=>12:00am-11:30am [人员3]=>凌晨2:00-晚上11:30 这是另一个数组 开始时间 Array ( [0] => Array ( [1] => 1:30am [2] => 5:00pm
开始时间
Array
(
[0] => Array
(
[1] => 1:30am
[2] => 5:00pm
)
[1] => Array
(
[1] => 12:00am
)
[2] => Array
(
[1] => 2:00am
)
)
Array
(
[0] => Array
(
[1] => 5:00am
[2] => 11:00pm
)
[1] => Array
(
[1] => 11:30am
)
[2] => Array
(
[1] => 11:30pm
)
)
结束时间
Array
(
[0] => Array
(
[1] => 1:30am
[2] => 5:00pm
)
[1] => Array
(
[1] => 12:00am
)
[2] => Array
(
[1] => 2:00am
)
)
Array
(
[0] => Array
(
[1] => 5:00am
[2] => 11:00pm
)
[1] => Array
(
[1] => 11:30am
)
[2] => Array
(
[1] => 11:30pm
)
)
两个时间跨度重叠时有四种情况,可分为两种:
// As, Ae = A start, A end
// Bs, Be = B start, B end
1) A *-----* -.
B *--------* | As <= Bs && Ae >= Bs
} = A starts before B
| A ends during the span of B and can extend
2) A *---------------* -' beyond B
B *--------*
3) A *------* -.
B *-------* | Bs <= As && Be >= As
} = B starts before A
| B ends during the span of A and can extend
4) A *------* -' beyond A's duration
B *---------------*
//As,Ae=开始,结束
//Bs,Be=B开始,B结束
1) A*----*-。
B*----------*| As=Bs
}=A在B之前开始
|A在B的跨度内结束,并可延伸
2) A*----“在B之外”
B*--------*
3) A*----。
B*----*| Bs=As
}=B在A之前开始
|B在A的跨度内结束,并可延伸
4) A*-*-'超过A的持续时间
B*---------------*
使用此信息,可以遍历明细表,比较两个明细表是否重叠,如果重叠,则计算两个明细表的交点。然后使用这个新的交叉时间作为循环中下一次比较的基础(因为您正在寻找所有可用性计划的最终交叉点)