使用php的员工的可用性

时间:2016-01-11 11:03:00

标签: php mysql datetime

在我的系统中,我有两张桌子。一个用于staff,另一个用于jobs

Jobs表包含以下数据: job_id(int) staff_id(int) starttime(datetime) 结束时间(日期时间)

员工很简单: staff_id(id) name(varchar)

但是,我需要想出办法来确定工作人员是否可用。意思是他们已经安排好了。例如,staff_id保存了以下数据: starttime:2016-01-11 12:00 enddtime:2016-01-11 17:00

2016-01-11 16:00开始不能上新工作。此外,他们不应该在2016-01-11 13:00结束工作。

我试图搜索一些PHP日历逻辑但到目前为止还没有找到任何好处。

EDIT 我所做的是使用以下代码检查某个块内的日期。但是,如果userstartuserend都在日期范围startdateenddate之外,则此剂量无效。

$starttime = "2016-01-11 20:00";
$endtime = "2016-01-11 22:00";
$userstart = '2016-01-11 20:10';
$userend = '2016-01-12 01:10';


function check_time($starttime, $endtime, $userstart, $userend){
    $start_ts = strtotime($starttime);
    $end_ts = strtotime($endtime);
    $userstart_ts = strtotime($userstart);
    $userend_ts = strtotime($userend);

    if(($userstart_ts >= $start_ts) && ($userstart_ts <= $end_ts) OR ($userend_ts >= $start_ts) && ($userend_ts <= $end_ts)){
        return true;
    }else{
        return false;
    }
}

if(check_time($starttime, $endtime, $userstart, $userend)){
    echo 'Staff work';
}else {
    echo 'Staff free';
}

以上将输出&#34;员工的工作&#34;。但是,如果我更改为以下内容,则会打印出Staff free

$userstart = '2016-01-11 19:10';
$userend = '2016-01-12 01:10'

1 个答案:

答案 0 :(得分:0)

最后我最终得到了这段代码。最后一个问题是处理重叠的事件。

$starttime = "2016-01-11 20:00";
$endtime = "2016-01-11 22:00";
$userstart = '2016-01-11 19:10';
$userend = '2016-01-11 21:10';

function check_time($starttime, $endtime, $userstart, $userend){
    $start_ts = strtotime($starttime);
    $end_ts = strtotime($endtime);
    $userstart_ts = strtotime($userstart);
    $userend_ts = strtotime($userend);

    if(($userstart_ts >= $start_ts) && ($userstart_ts <= $end_ts) OR ($userend_ts >= $start_ts) && ($userend_ts <= $end_ts)){
        return true;
    }else{
        if(($userstart_ts <= $start_ts) && ($userend_ts >= $end_ts)){
            return true;
        }else{
            return false;
        }
     }
}

if(check_time($starttime, $endtime, $userstart, $userend)){
    echo 'Staff work';
}else {
    echo 'Staff free';
}

但是,为了使用此function,我将被迫遍历数据库中的所有entries。我认为这不会有效率

修改

下面是我提出的最终SQL查询。它会显示当前正在userstartuserend工作的员工,以防有人寻找类似的东西。

SELECT staff FROM staff WHERE (startdate BETWEEN '2016-01-11 22:00' AND '2016-01-11 23:00') OR (enddate BETWEEN '2016-01-11 22:00' AND '2016-01-11 23:00') OR (startdate < '2016-01-11 22:00' AND enddate > '2016-01-11 23:00');