การสร้างตารางปฏิทินนั้น มีขั้นตอนหลักๆ อยู่ประมาณ 5 ขั้นตอนครับ
1. ค้นหาตำแหน่งของวันที่ 1 ของเดือนที่ต้องการ
$startPoint = date('w', $timeDate); //จุดเริ่มต้น วันในสัปดาห์
2. หากไม่ได้เริ่มจากช่องซ้ายมือช่องแรกสุด ให้แทนที่ด้านหน้าเป็นช่องว่าง
if($startPoint < 7){ //ถ้าวันอาทิตย์จะเป็น 7
echo str_repeat("<td> </td>", $startPoint);
}
3. เริ่มวนลูปตั้งแต่วันที่ 1 จนถึงวันสุดท้ายของเดือนนั้น
for($i=1; $i <= $lastDay; $i++)
4. สร้างข้อมูลให้ครบ 7 วัน หรือ 7 คอลัมน์ ถ้าครบขึ้นบรรทัดใหม่
if($col % 7 == false)
5. ถ้าวันที่สุดท้ายของเดือนไม่ได้อยู่ช่องสุดท้าย ให้แทนที่ช่องที่เหลือด้วยค่าว่าง
if($col < 7){ // ถ้ายังไม่ครบ7 วัน
echo str_repeat("<td> </td>", 7-$col);
}
ผลลัพธ์ที่ได้
<?php
header('Content-Type: text/html; charset=utf-8');
$weekDay = array( 'อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสฯ', 'ศุกร์', 'เสาร์');
$thaiMon = array( "01" => "มกราคม", "02" => "กุมภาพันธ์", "03" => "มีนาคม", "04" => "เมษายน",
"05" => "พฤษภาคม","06" => "มิถุนายน", "07" => "กรกฎาคม", "08" => "สิงหาคม",
"09" => "กันยายน", "10" => "ตุลาคม", "11" => "พฤศจิกายน", "12" => "ธันวาคม");
//Sun - Sat
$month = isset($_GET['month']) ? $_GET['month'] : date('m'); //ถ้าส่งค่าเดือนมาใช้ค่าที่ส่งมา ถ้าไม่ส่งมาด้วย ใช้เดือนปัจจุบัน
$year = isset($_GET['year']) ? $_GET['year'] : date('Y'); //ถ้าส่งค่าปีมาใช้ค่าที่ส่งมา ถ้าไม่ส่งมาด้วย ใช้ปีปัจจุบัน
//วันที่
$startDay = $year.'-'.$month."-01"; //วันที่เริ่มต้นของเดือน
$timeDate = strtotime($startDay); //เปลี่ยนวันที่เป็น timestamp
$lastDay = date("t", $timeDate); //จำนวนวันของเดือน
$endDay = $year.'-'.$month."-". $lastDay; //วันที่สุดท้ายของเดือน
$startPoint = date('w', $timeDate); //จุดเริ่มต้น วันในสัปดาห์
//echo "<br>\$data ";
//print_r($data);
//echo "<hr>";
?>
<html>
<head>
<title>ทดลองสร้างปฏิทินด้วย PHP</title>
<script type='text/javascript'>
function goTo(month, year){
window.location.href = "day_of_week.php?year="+ year +"&month="+ month;
}
</script>
<style>
th,td{width:50px;height: 30px; text-align:center}
th{background-color: #eeeeee;}
#tb_calendar, #main{ width : 500px;}
#main{ border : 2px solid #46A5E0;}
#nav{
background-color: #0C79A4;
min-height: 20px;
padding: 10px;
text-align: center;
color : white;
}
.navLeft{float: left; }
.navRight{float: right;}
.title{float: left; text-align: center; width: 300px;}
</style>
</head>
<body>
<?php
echo "<br/>ตำแหน่งของวันที่ $startDay คือ <strong>", $startPoint , " (ตรงกับ วัน" , $weekDay[$startPoint].")</strong>";
$title = "เดือน $thaiMon[$month] <strong>". $startDay. " : ". $endDay."</strong>";
//ลดเวลาลง 1 เดือน
$prevMonTime = strtotime ( '-1 month' , $timeDate );
$prevMon = date('m', $prevMonTime);
$prevYear = date('Y', $prevMonTime);
//เพิ่มเวลาขึ้น 1 เดือน
$nextMonTime = strtotime ( '+1 month' , $timeDate );
$nextMon = date('m', $nextMonTime);
$nextYear = date('Y', $nextMonTime);
echo '<div id="main">';
echo '<div id="nav">
<button class="navLeft" onclick="goTo(\''.$prevMon.'\', \''.$prevYear.'\');"><< เดือนที่แล้ว</button>
<div class="title">'.$title.'</div>
<button class="navRight" onclick="goTo(\''.$nextMon.'\', \''.$nextYear.'\');">เดือนต่อไป >></button>
</div>
<div style="clear:both"></div>';
echo "<table id='tb_calendar' border='1'>"; //เปิดตาราง
echo "<tr>
<th>อาทิตย์</th><th>จันทร์</th><th>อังคาร</th><th>พุธ</th><th>พฤหัสฯ</th><th>ศุกร์</th><th>เสาร์</th>
</tr>";
echo "<tr>"; //เปิดแถวใหม่
$col = $startPoint; //ให้นับลำดับคอลัมน์จาก ตำแหน่งของ วันในสับดาห์
if($startPoint < 7){ //ถ้าวันอาทิตย์จะเป็น 7
echo str_repeat("<td> </td>", $startPoint); //สร้างคอลัมน์เปล่า กรณี วันแรกของเดือนไม่ใช่วันอาทิตย์
}
for($i=1; $i <= $lastDay; $i++){ //วนลูป ตั้งแต่วันที่ 1 ถึงวันสุดท้ายของเดือน
$col++; //นับจำนวนคอลัมน์ เพื่อนำไปเช็กว่าครบ 7 คอลัมน์รึยัง
echo "<td>", $i , "</td>"; //สร้างคอลัมน์ แสดงวันที่
if($col % 7 == false){ //ถ้าครบ 7 คอลัมน์ให้ขึ้นบรรทัดใหม่
echo "</tr><tr>"; //ปิดแถวเดิม และขึ้นแถวใหม่
$col = 0; //เริ่มตัวนับคอลัมน์ใหม่
}
}
if($col < 7){ // ถ้ายังไม่ครบ7 วัน
echo str_repeat("<td> </td>", 7-$col); //สร้างคอลัมน์ให้ครบตามจำนวนที่ขาด
}
echo '</tr>'; //ปิดแถวสุดท้าย
echo '</table>'; //ปิดตาราง
echo '</main>';
?>
</body>
</html>
ดูตัวอย่างการทำงาน
ดาวน์โหลดซอร์สโค๊ดรวมตัวอย่าง ที่นี
"PHP ไม่ได้สร้างสุดยอดโปรแกรมแต่ PHP ช่วยให้งานคุณง่ายขึ้นต่างหาก"
PHP CI MANIA - PHP Code Generatorโปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม
สนใจสั่งซื้อเพียง 3,990 บาท
PHP CI MANIA - PHP Code Generator
โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
บทความที่เกี่ยวข้อง
- PHP Calendar : ฝีกสร้างปฏิทินไว้ใช้ในงานต่างๆ
- PHP Calendar : สร้างปฏิทินมุมมองแบบสัปดาห์
- สร้างปฏิทิน รายงานยอดที่พนักงานทำได้ในแต่ละเดือนแบบง่ายๆ
- สร้างตารางเรียน ตารางสอนด้วย PHP
- PHP Calendar : การสร้างปฏิทินเพื่อแสดงสถานะการจองในแต่ละวัน



ความคิดเห็น
แสดงความคิดเห็น