การสร้างตารางปฏิทินนั้น มีขั้นตอนหลักๆ อยู่ประมาณ 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 : การสร้างปฏิทินเพื่อแสดงสถานะการจองในแต่ละวัน
ความคิดเห็น
แสดงความคิดเห็น