PHP Checking Work Day , Holiday ตรวจสอบวันหยุด และวันหยุดราชการ
สำหรับวิดีโอนี้จะนำเสนอตัวอย่างการเขียนโค้ดตรวจสอบวันหยุด โดยจะมีเนื้อหาเกี่ยวกับการหาจำนวนวันในระหว่างช่วงวันที่ 2 วันที่กำหนดไว้ จะได้เรียนรู้เกี่ยวกับฟังก์ชั่น strtotime() ที่ใช้แปลงวันที่เป็นวันใรรูปแบบเวลา เพื่อใช้คำนวณ การใช้ date("w", strtotime($date)) เพื่อหาค่าวันประจำสัปดาห์
นอกจากนี้ยังมีฟังก์ชั่นที่ทำงานด้าน Array เพิ่มเข้ามาอีกด้วย คือ
array_count_values() สำหรับนับกลุ่มอาร์เรย์ที่เหมือนกัน เช่น นับจำนวนวันประจำสัปดาห์นอกจากนี้ยังมีฟังก์ชั่นที่ทำงานด้าน Array เพิ่มเข้ามาอีกด้วย คือ
array_map() สำหรับใช้แทนการ Loop แบบทำงานเฉพาะทาง เช่น ต้องการวันประจำสัปดาห์
array_intersect() สำหรับคัดเลือก Array ที่ตรงกับที่ต้องการ
iterator_count() สำหรับนับจำนวน Object ที่สร้างจาก DatePeriod Class
[Source Code]
<html>
<head>
<meta charset="UTF-8">
<title>[REVIEW BY Cyberman] ThaiCreate.Com Tutorial</title>
</head>
<body>
<?php
function connect_db(){
try {
return new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'tobedev', 'abcd.1234');
} catch (PDOException $e) {
print "Connection failed : " . $e->getMessage() . "<br/>";
}
}
function GetPublicHoliday($start_date, $end_date)
{
$conn = connect_db();
$strSQL = "SELECT PublicHoliday FROM public_holiday WHERE PublicHoliday BETWEEN '$start_date' AND '$end_date' ";
$sth = $conn->prepare($strSQL);
$sth->execute();
return $sth->fetchAll(PDO::FETCH_COLUMN);
$conn = null;
}
$my_start_date = '2017-05-01';
$my_end_date = '2017-05-15';
$begin = new DateTime( $my_start_date );
$end = new DateTime( $my_end_date );
$date_range = new DatePeriod($begin, new DateInterval('P1D'), $end->modify( '+1 day' ));
$intTotalDay = iterator_count($date_range);
$publicHoliday = GetPublicHoliday($my_start_date, $my_end_date);
$my_range_date = array();
foreach($date_range as $dt){
$my_range_date[] = $dt->format('Y-m-d');
}
$setDayOfWeek = function($date) {
return date("w", strtotime($date));
};
$count_day = array_count_values(array_map($setDayOfWeek, $my_range_date));
$sunday = isset($count_day[0]) ? $count_day[0] : 0;
$saturday = isset($count_day[6]) ? $count_day[6] : 0;
$holiday = $sunday + $saturday;
$public_holiday = count(array_intersect($my_range_date, $publicHoliday));
$all_holiday = ($holiday + $public_holiday);
$work_day = $intTotalDay - $all_holiday;
echo "<br>วันที่ = $my_start_date - $my_end_date";
echo "<br>Total Day = $intTotalDay";
echo "<br>Work Day = <font color=green>$work_day</font>";
echo "<br>Holiday = <font color=orange>$holiday</font>";
echo "<br>Public Holiday = <font color=red>$public_holiday</font>";
echo "<br>All Holiday = <font color=magenta>".($all_holiday)."</font>";
?>
<br/><br/>
</body>
</html>
[SQL]
--
-- Database: `test`
--
-- --------------------------------------------------------
--
-- Table structure for table `public_holiday`
--
CREATE TABLE `public_holiday` (
`FisYear` int(4) NOT NULL,
`PublicHoliday` date NOT NULL,
`Descripiton` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `public_holiday`
--
INSERT INTO `public_holiday` (`FisYear`, `PublicHoliday`, `Descripiton`) VALUES
(2017, '2017-05-04', 'วันหยุดที่ 1'),
(2017, '2017-05-12', 'วันหยุดที่ 2');
--
-- Indexes for dumped tables
--
--
-- Indexes for table `public_holiday`
--
ALTER TABLE `public_holiday`
ADD PRIMARY KEY (`FisYear`,`PublicHoliday`);
ความคิดเห็น
แสดงความคิดเห็น