我有兩名員工在星期一的兩個時間段工作。我想爲我們的客戶提供一個簡單的方法來創建一天的細分(晚上,下午,上午)的細分。如何判斷時間範圍是否在時間範圍內? 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我試圖把所有東西都分解成開始和結束時間塊,我成功了。但是,當它們與白天(晚上,下午,上午)的時間比較時,我不知道如何比較它們。 –