แนวทางโค้ตต่อไปนี้ เป็นแนวทาง การสร้าง ตารางเวลา เช่น
ตารางเรียน หรือตารางกิจกรรม เพื่อแสดงข้อมูล
โดยในตัวอย่าง จะใช้ชุดข้อมูลตัวอย่าง ในรูปแบบ array สามารถนำไปประยุตก์ใช้กับฐานข้อมูลได้
โดยรูปแบบการใช้งาน จะเป็นการประยุกต์ ให้เราสามารถสร้างตารางเวลากิจกรรมได้ง่ายขึ้น
ตัวอย่าง ตารางกิจกรรมที่ได้

กรณีใช้งามร่วมกับฐานข้อมูล ให้สร้างตาราง ที่มีโครงสร้างในลักษณะดังนี้
-- -- Table structure for table `tbl_schedule` -- CREATE TABLE IF NOT EXISTS `tbl_schedule` ( `course_id` int(11) NOT NULL, `course_title` varchar(100) NOT NULL, `course_date` date NOT NULL, `course_start_time` time NOT NULL, `course_end_time` time NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; -- -- Dumping data for table `tbl_schedule` -- -- -- Indexes for dumped tables -- -- -- Indexes for table `tbl_schedule` -- ALTER TABLE `tbl_schedule` ADD PRIMARY KEY (`course_id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tbl_schedule` -- ALTER TABLE `tbl_schedule` MODIFY `course_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=0;
รูปข้อมูลตัวอย่างในฐานข้อมูล

รูปแบบการทำงานของตารางเรียน หรือตารางเวลานี้คือ
เมื่อเปิดขึ้นมาครั้งแรก จะใช้วันปัจจุบันเป็นตัวกำหนด แล้วหาวันแรกจันทร์แรกของ
สัปดาห์วาเป็นวันที่เท่าไหร่ หาวันจันทร์ของสัปดาห์ก่อนหน้าเพื่อส่งไปกับปุ่ม prev
และหาวันจันทร์ของสัปดาห์ถัดไปเพื่อส่งไปกับปุ่ม next
การค้นหาข้อมูลในตาราง จะใช้วีธีการคิวรี่ข้อมูลหาข้อมูลตั้งแต่วันจันทร์ไปถึงวัน
อาทิตย์ของสัปดาห์นั้นๆ แล้วสร้างเป็นชุดข้อมูล array จากนั้นนำไปแสดงในตาราง
ไฟล์ dbconnect.php
<?php
$mysqli = new mysqli("localhost", "root","","test");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
if(!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
exit();
}
ไฟล์ demo_schedule.php
<?php
require_once("dbconnect.php");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
.wrap_schedule{
margin:auto;
width:800px;
}
.activity{
background-color:#C6EEC3;
font-size:12px;
}
.time_schedule{
font-size:12px;
}
.day_schedule{
font-size:12px;
}
.time_schedule_text{
width:60px;
}
.day_schedule_text{
width:80px;
}
</style>
<?php
// ส่วนของตัวแปรสำหรับกำหนด
$thai_day_arr=array("จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์","อาทิตย์");
$thai_month_arr=array(
"","มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน",
"กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"
);
$thai_month_arr_short=array(
"","ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."
);
////////////////////// ส่วนของการจัดการตารางเวลา /////////////////////
$sc_startTime=date("Y-m-d 08:00:00"); // กำหนดเวลาเริ่มต้ม เปลี่ยนเฉพาะเลขเวลา
$sc_endtTime=date("Y-m-d 18:00:00"); // กำหนดเวลาสื้นสุด เปลี่ยนเฉพาะเลขเวลา
$sc_t_startTime=strtotime($sc_startTime);
$sc_t_endTime=strtotime($sc_endtTime);
$sc_numStep="60"; // ช่วงช่องว่างเวลา หน่ายนาที 60 นาที = 1 ชั่วโมง
$num_dayShow=5; // จำนวนวันที่โชว์ 1 - 7
$sc_timeStep=array();
$sc_numCol=0;
////////////////////// ส่วนของการจัดการตารางเวลา /////////////////////
// ส่วนของการกำหนดวัน สามารถนำไปประยุกต์กรณีทำตารางเวลาแบบ เลื่อนดูแต่ละสัปดาห์ได้
$now_day=date("Y-m-d"); // วันปัจจุบัน ให้แสดงตารางที่มีวันปัจจุบัน เมื่อแสดงครั้งแรก
if(isset($_GET['uts']) && $_GET['uts']!=""){ // เมื่อมีการเปลี่ยนสัปดาห์
$now_day=date("Y-m-d",trim($_GET['uts'])); // เปลี่ยนวันที่ แปลงจากค่าวันจันทร์ที่ส่งมา
}
// หาตัวบวก หรือลบ เพื่อหาวันที่ของวันจันทร์ในสัปดาห์
$startWeekDay_back=(date("w",strtotime($now_day))!=0)?-(date("w",strtotime($now_day))):-6;
$start_weekDay=date("Y-m-d",strtotime("+$startWeekDay_back day")); // หาวันที่ของวันจันทร์ของสัปดาห์
if(isset($_GET['uts']) && $_GET['uts']!=""){ // ถ้ามีส่งค่าเปลี่ยนสัปดาห์มา
$start_weekDay=$now_day; // ให้ใช้วันแรก เป็นวันที่ส่งมา
}
// หววันที่วันอาทิตย์ของสัปดาห์นั้นๆ
$end_weekDay=date("Y-m-d",strtotime($start_weekDay." +7 day"));
$timestamp_prev=strtotime($start_weekDay." -7 day");// ค่าวันจันทร์ของอาทิตย์ก่อหน้า
$timestamp_next=strtotime($start_weekDay." +7 day"); // ค่าวันจันทร์ของอาทิตย์ถัดไป
while($sc_t_startTime<=$sc_t_endTime){
$sc_timeStep[$sc_numCol]=date("H:i",$sc_t_startTime);
$sc_t_startTime=$sc_t_startTime+($sc_numStep*60);
$sc_numCol++; // ได้จำนวนคอลัมน์ที่จะแสดง
}
///////////////// ส่วนของข้อมูล ที่ดึงจากฐานข้อมูบ ////////////////////////
$data_schedule=array();
$sql="
SELECT * FROM tbl_schedule WHERE
course_date BETWEEN '".$start_weekDay."' AND '".$end_weekDay."'
ORDER BY course_date
";
$result = $mysqli->query($sql);
if($result){
while($row = $result->fetch_assoc()){
$data_schedule[$row['course_date']][] = array(
"start_time"=>$row['course_start_time'],
"end_time"=>$row['course_end_time'],
"detail"=>$row['course_title']
);
}
}
///////////////// ส่วนของข้อมูล ที่ดึงจากฐานข้อมูบ ////////////////////////
///////////////// ตัวอย่างรูปแบบข้อมูล //////////////////
/*$data_schedule=array(
"2016-10-30"=>array(
"0"=>array(
"start_time"=>"08:00:00",
"end_time"=>"10:00:00",
"detail"=>"test data1"
)
),
"2016-04-05"=>array(
"0"=>array(
"start_time"=>"10:00:00",
"end_time"=>"12:00:00",
"detail"=>"test data2"
),
"1"=>array(
"start_time"=>"13:00:00",
"end_time"=>"15:00:00",
"detail"=>"test data3"
),
"3"=>array(
"start_time"=>"17:00:00",
"end_time"=>"18:00:00",
"detail"=>"test data4"
),
),
"2016-04-07"=>array(
"0"=>array(
"start_time"=>"09:00:00",
"end_time"=>"12:00:00",
"detail"=>"test data5"
),
"1"=>array(
"start_time"=>"13:00:00",
"end_time"=>"16:00:00",
"detail"=>"test data6"
),
"3"=>array(
"start_time"=>"16:00:00",
"end_time"=>"18:00:00",
"detail"=>"test data7"
),
)
);
*/
///////////////// ตัวอย่างรูปแบบข้อมูล //////////////////
?>
<div class="wrap_schedule">
<button type="button" onClick="window.location='demo_schedule.php?uts=<?=$timestamp_prev?>'">< Prev</button>
<button type="button" onClick="window.location='demo_schedule.php?uts=<?=$timestamp_next?>'">Next ></button>
</div>
<br>
<div class="wrap_schedule">
<table align="center" border="1" cellspacing="2" cellpadding="2"style="border-collapse:collapse;" >
<tr class="time_schedule">
<td align="center" valign="middle" height="50">
</td>
<?php
for($i_time=0;$i_time<$sc_numCol-1;$i_time++){
?>
<td align="center" valign="middle" height="50">
<div class="time_schedule_text">
<?=$sc_timeStep[$i_time]?> - <?=$sc_timeStep[$i_time+1]?>
</div>
</td>
<?php }?>
</tr>
<?php
// วนลูปแสดงจำนวนวันตามที่กำหนด
for($i_day=0;$i_day<$num_dayShow;$i_day++){
$dayInSchedule_chk=date("Y-m-d",strtotime($start_weekDay." +".$i_day." day"));
$dayInSchedule_show=date("d-m-Y",strtotime($start_weekDay." +".$i_day." day"));
?>
<tr>
<td align="center" valign="middle" height="50" class="day_schedule">
<div class="day_schedule_text">
<?=$thai_day_arr[$i_day]?>
<br>
<?=$dayInSchedule_show?>
</div>
</td>
<?php
// ตรวจสอบและกำหนดช่วงเวลาให้สอดคล้องกับช้อมูล
if(isset($data_schedule[$dayInSchedule_chk])){
$num_data=count($data_schedule[$dayInSchedule_chk]);
}else{
$num_data=0;
}
$arr_checkSpan=array();
$arr_detailShow=array();
$real_sc_numCol=$sc_numCol;
for($i_time=0;$i_time<$sc_numCol-1;$i_time++){
if($num_data>0){
$haveIN=0;
$dataShow="";
foreach($data_schedule[$dayInSchedule_chk] as $k=>$v){
if(strtotime($dayInSchedule_chk." ".$sc_timeStep[$i_time].":00") ==
strtotime($dayInSchedule_chk." ".$v['start_time'])){
$haveIN++;
$dataShow=$v['detail'];
$add=1;
while(strtotime($dayInSchedule_chk." ".$sc_timeStep[$i_time+$add].":00") <
strtotime($dayInSchedule_chk." ".$v['end_time'])){
$haveIN++;
$dataShow=$v['detail'];
$add++;
}
}
}
$arr_checkSpan[$i_time]=$haveIN;
$arr_detailShow[$i_time]=$dataShow;
}
}
for($i_time=0;$i_time<$sc_numCol-1;$i_time++){
$colspan="";
$css_use="";
$dataShowIN="";
if(isset($arr_checkSpan[$i_time])){
if($arr_checkSpan[$i_time]>0){
$dataShowIN=$arr_detailShow[$i_time];
$css_use="class=\"activity\"";
}
if($arr_checkSpan[$i_time]>1){
$colspan="colspan=\"".$arr_checkSpan[$i_time]."\"";
$step_add=$arr_checkSpan[$i_time]-1;
$i_time+=$step_add;
}
}
?>
<td <?=$css_use?> <?=$colspan?> align="center" valign="middle" height="50">
<?php
echo $dataShowIN;
?>
</td>
<?php }?>
</tr>
<?php }?>
</table>
</div>
</body>
</html>