我有两名员工在星期一的两个时间段工作。我想为我们的客户提供一个简单的方法来创建一天的细分(晚上,下午,上午)的细分。如何判断时间范围是否在时间范围内? PHP
- Morning: 0001 to 1200
- Afternoon: 1201 to 1600
- Evening: 1601 to 2400
周一至周五的时间表
John是:上午7时至下午1时
迈克尔的作品:下午1点到晚上7点
周六的日程
John是:上午8时至中午12时
周一 - 周五应该显示按钮:上午,下午和晚上。 星期六应该只显示Morning按钮。
我不知道如何做到这一点,因为约翰的日程安排在下午结束。所以我想知道如何检查一个时间范围是否在另一个时间范围内,并返回一个布尔值或其他值。
我试图打破一切成开始和结束的时间块,我顺利拿到。但是,当它们与白天(晚上,下午,上午)的时间比较时,我不知道如何比较它们。
我不想因为试图让你们写我的代码,我需要帮助逻辑。从截图中可以看出,除了这个小而大的作品外,这已经全部写好了。 任何想法将不胜感激!
[解决方法]
我使用Laravel的PHP框架的ORM叫雄辩。 *注意:在做范围(1201,1600,5)把事情搞乱和范围(1200,1600),将导致巨大的内存消耗,所以我用5
$day_segments = array(
"morning" => range(0, 1200, 5),
"afternoon" => range(1200, 1600, 5),
"evening" => range(1600, 2400, 5)
);
// On what days of the week are users working and in what time ranges?
$user_timeranges = array();
foreach ($record->users()->get() as $user) {
foreach ($user->timeblocks as $timeblock) {
$start_range = date('Hi', strtotime("{$timeblock->start_hour} {$timeblock->start_divide}"));
$end_range = date('Hi', strtotime("{$timeblock->end_hour} {$timeblock->end_divide}"));
$user_timeranges[$timeblock->day][] = range($start_range, $end_range, 5);
}
}
// On each day what day segments are available to create appointments?
$available_segments = array();
foreach ($days_available as $day) {
$available_segments[$day] = array();
foreach ($day_segments as $name => $segment) {
$available_segments[$day][$name] = 0;
foreach ($user_timeranges[$day] as $timerange) {
if (array_intersect($segment, $timerange)) {
$available_segments[$day][$name]++;
}
}
}
}
vardump($available_segments);
exit;
好像你问我们做的工作适合你。 – Kermit
请不要这么想,我已经把所有的东西都布置好了,我的PHP正在生成一切,我很难用这个逻辑。我不需要任何代码,我只是不明白如何写这个。 –
@Munchies我试图把所有东西都分解成开始和结束时间块,我成功了。但是,当它们与白天(晚上,下午,上午)的时间比较时,我不知道如何比较它们。 –