如何在php自定义计划日历

时间:2016-12-23 07:51:12

标签: php mysql calendar

enter image description here

我正在尝试为汽车租赁公司制作一个自定义汽车时刻表日历,以便在附件文件中显示白色的所有自由日和红色的忙碌日。直到现在我成功地用正确的日期和样式颜色绘制日历,但我也希望在td单元格中显示每个预订的客户名称。如果可能的话,合并预订单元

这是我的工作代码,但无论我尝试什么,我都无法在日期数组中传递客户名称,因此我可以以某种方式识别每个客户的预订日。

$datstart2 = "2017-01-01 00:00:00" ;
$datend2 = "2017-01-31 00:00:00" ;
foreach($cars as $cid){
$query2 = 'select rr.resnumber, DATE_FORMAT( `datestart` , "%Y-%m-%d" ), DATE_FORMAT( `dateend` , "%Y-%m-%d" ), rr.cl_name, rr.totdays from res_cars rc,res_reservations rr where rr.carid="'.$cid.'" and datestart > now() and (datestart BETWEEN "'.$datstart2.'" AND "'.$datend2.'") group by resnumber order by datestart ASC';
$result2=mysql_query($query2) or die($query2);
$num_rows2=mysql_num_rows($result2);

for($j=0;$j<$num_rows2;$j++){
    $row2=mysql_fetch_row($result2);

    $current = strtotime($row2[1]);
    $last = strtotime($row2[2]);
    //here I generate array that contains all busy days between datestart & dateend for each reservation
    while( $current <= $last ){
        $dates1[] = date('Y-m-d', $current);
        $current = strtotime($step, $current);
    }
}

//这里我生成了一个新的数组,所有的日子都没有预订1月的汽车     $ dates2数组包含该月的所有日期

$emptydays=array_diff($dates2,$dates1);

foreach($dates as $date){
    //here I draw table cell with different styles if the dy is reserved or not
    if(in_array($date,$emptydays)){
        echo '<td class="emptyday">.</td>';
    } else {
       echo '<td class="busyday">X</td>';
    }
}
}

问题是我希望来自busyday类型的表格单元格看起来像:

echo '<td class="busyday">Customer names here</td>';

但无论我尝试过什么都没有成功。请各位帮帮我,并告诉我打印每个预订的客户名称(cl_name)的正确方法,并使其看起来像:

echo '<td class="busyday">Customer names here</td>';

1 个答案:

答案 0 :(得分:0)

我的方法是将对象写入包含日期和数组的$dates1 / $dates数组。这样,两个属性都可以在第二个循环中使用。一个用于搜索日期,另一个用于访问该名称。

第一部分:

$datstart2 = "2017-01-01 00:00:00" ;
$datend2 = "2017-01-31 00:00:00" ;
foreach($cars as $cid){
$query2 = 'select rr.resnumber, DATE_FORMAT( `datestart` , "%Y-%m-%d" ), DATE_FORMAT( `dateend` , "%Y-%m-%d" ), rr.cl_name, rr.totdays from res_cars rc,res_reservations rr where rr.carid="'.$cid.'" and datestart > now() and (datestart BETWEEN "'.$datstart2.'" AND "'.$datend2.'") group by resnumber order by datestart ASC';
$result2=mysql_query($query2) or die($query2);
$num_rows2=mysql_num_rows($result2);

for($j=0;$j<$num_rows2;$j++){
    $row2=mysql_fetch_row($result2);

    $current = strtotime($row2[1]);
    $last = strtotime($row2[2]);
    //here I generate array that contains all busy days between datestart & dateend for each reservation
    while( $current <= $last ){
        $ODateInfo = new stdClass();
        $ODateInfo->date = date('Y-m-d', $current);
        $ODateInfo->name = $row2[4]
        $dates1[] = $ODateInfo;
        date('Y-m-d', $current);
        $current = strtotime($step, $current);
        $datesCompare[] = date('Y-m-d', $current);
    }
}

$emptydays=array_diff($dates2,$datesCompare);

第二部分:

foreach($dates as $date){
    //here I draw table cell with different styles if the dy is reserved or not
    if(in_array($date->date,$emptydays)){
        echo '<td class="emptyday">.</td>';
    } else {
       echo '<td class="busyday">' . $date->name . '</td>';
    }
}
}

最终的代码看起来像这样:(注意我无法测试它,虽然这应该指向正确的方向。)

如果您还需要更多信息,请与我们联系。

此致

詹姆斯