Php 在sql中显示2小时之间的时间

Php 在sql中显示2小时之间的时间,php,sql,datetime,mysqli,Php,Sql,Datetime,Mysqli,我有一个表,我填写了数据库信息。此表如下所示 接下来,在我的概览页面上有一个如下所示的表 但是我怎么能在15点加上这个名字呢 这是我使用的代码 $matrix = array(); // matrix vullen while ($row = $res->fetch_assoc()) { if ($row['datum_van'] != $date) { $date = $row['datum_van'];

我有一个表,我填写了数据库信息。此表如下所示

接下来,在我的概览页面上有一个如下所示的表

但是我怎么能在15点加上这个名字呢

这是我使用的代码

    $matrix = array();
    // matrix vullen
    while ($row = $res->fetch_assoc()) {
        if ($row['datum_van'] != $date) {
            $date = $row['datum_van'];
            $matrix[$date] = $times;
        }
        $matrix[$date][$row['tijd_van']][] = $row['name'];
        $matrix[$date][$row['tijd_tot']][] = $row['name'];
    }
    // de tabel beginnen
    $var = '<table class="striped">';
    $var .= '<tr class="header" id="ax">';
    $var .= '<td id="a_datum">Datum</td>';

    for($i=9; $i<24; $i++) {

        $var .= '<td>' . $i . ':00</td>';                        
    }
    $var .= '<td>geen eindtijd</td>'; 

    $var .= '</tr>';
    // de matrix uitlezen
    foreach ($matrix as $datekey => $timearray) {
        $var .= '<tr><td>' . $datekey . '</td>';
        foreach ($timearray as $names) {
            $var .= '<td>';
            if (count($names) > 0) {
                $var .= implode('<br>', $names);
            }
            else {
                $var .= '&nbsp;';
            }
            $var .= '</td>';
        }
        $var .= '</tr>' . PHP_EOL;
    }
    $var .= '</table>';
    echo $var;
$matrix=array();
//矩阵vullen
而($row=$res->fetch_assoc()){
如果($row['datum_van'!=$date){
$date=$row['datum_van'];
$matrix[$date]=$times;
}
$matrix[$date][$row['tijd_van'][]=$row['name'];
$matrix[$date][$row['tijd_tot'][]=$row['name'];
}
//德塔贝尔贝金宁酒店
$var='';
$var.='';
$var.='Datum';
对于($i=9;$i$timearray){
$var.=''.$datekey'.';
foreach($timearray作为$names){
$var.='';
如果(计数($names)>0){
$var.=内爆(“
”,$names); } 否则{ $var.=''; } $var.=''; } $var.=''.PHP\u EOL; } $var.=''; echo$var;
在不知道完整数据集的情况下。。。检查时间是否大于(或等于)开始和小于(或等于)结束,如果这两种情况都是真的,请在字段中输入此人的姓名。

问题在于,您仅使用此代码为这两个单元格赋值

$matrix[$date][$row['tijd_van']][] = $row['name'];
$matrix[$date][$row['tijd_tot']][] = $row['name'];
您需要检查这两个值
van
von
之间的时间间隔,并为这两个值之间的小时设置名称

这可以通过以下方式实现

$start_timestamp = strtotime($row['tijd_van']);
$scnds_between = strtotime($row['tijd_tot']) - $start_timestamp;
$hrs_between = floor($scnds_between / 3600) - 1;
// -1 because the first hour is already in matrix
for ($i=1; $i<=$hrs_between; ++$i) {
    $new_date = date("Y-m-d H:i:s", $start_timestamp+($i*3600));
    $matrix[$date][$new_date][] = $row['name'];
}
$start_timestamp=strottime($row['tijd_van']);
$scnds\u between=strotime($row['tijd\u tot'])-$start\u timestamp;
$hrs\u-between=楼层($scnds\u-between/3600)-1;
//-1因为第一个小时已经在矩阵中

对于($i=1;$i),基于将名称填充到$timearray中的方法(代码未显示),您需要再添加一个检查。您需要检查是否存在一个名称条目,其中开始时间在当前时间之前,结束时间在当前时间之后。类似这样的简单检查将有助于正确填充$timearray:

if $cur_time < $time_start and $cur_time > $time_end
    // Add the name to the time-array
如果$cur\u time<$time\u开始和$cur\u时间>$time\u结束
//将名称添加到时间数组中

其中$cur\u time是您正在评估的时间,time\u start和time\u end是存储在数据库表中的值。

如果用户正在“开会”从14:00到16:00,这意味着他开会只有2小时,而不是3小时,所以只有14小时和15小时应该被标记,而不是16小时。如果from和to在不同的日子会发生什么?嗯,现在你这么说有点道理,但是如果从14:00到17:00,那么我还需要更多的时间来填充,对吗?这是你的逻辑,我只是试着去理解它。如果时间是14:00到17:00,那么14-15-16个小时应该被填满。如果时间是14:00到17:15,那么现在被填满了什么小时?如果开始日期和结束日期在不同的日子会发生什么?Glavić5分钟前
$timearray
来自foreach over
$matrix
,它是在项目开始时填充的代码$new\u date是空的。因为$start\u timestap也是空的。tijd\u van已经是一个时间了,所以strotime对它来说不是太多了吗?是的,只要删除所有的
strotime
,如果它已经是一个有效的时间戳,那么表中仍然没有记录。我调试了一点,似乎for循环中的变量无法填充。好的,请提供更多信息,例如
tijd_van
/
tijd_tot