ผมเขียนโปรแกรมตัวหนึ่งซึ่งจำเป็นจะต้องคำณวนหาวันหยุดภายในเดือนที่ต้องการ คิดกันง่ายๆว่าหยุดเฉพาะเสาร์-อาทิตย์ วันหยุดพิเศษไม่สนใจ หลังจากที่เขียนออกมาเป็นฟังก์ชั่นแล้ว ก็คิดว่าน้องๆอีกหลายคนอาจจะจำเป็นต้องใช้ ก็เลยเอามาให้ดูกัน อีกอย่างก็เพื่อเป็นแนวทางในการประยุกต์ใช้คำสั่ง PHP
สิ่งที่ท่านจะได้เรียนรู้ในฟังก์ชั่นที่ผมเขียนขึ้นนี้คือ
1.วิธีตรวจสอบว่าวันนั้นๆเป็นวันเสาร์หรือเปล่า
2.วิธีตรวจสอบว่าวันนั้นๆเป็นวันอาทิตย์หรือเปล่า
3. วิธีแปลงวัน ที่เป็นตัวหนังสือให้เป็นตัวเลข เพื่อง่ายต่อการเปรียบเทียบ วันสองวัน
4.จะได้รู้ว่าแท้จริงแล้วการเขียนโปรแกรมนั้นง่ายนิดเดียว
ได้ประโยชน์ถึง 4 ข้อผมว่ามันก็ควรค่าแก่การดูฟังก์ชั่นนี้แล้วล่ะ
function WorkingDays($year, $month, $day) { if (!$year) $year = date('Y'); if (!$month) $month = date('m'); if (!$day) $day = date('d'); //create a start and an end datetime $startdate = strtotime($year . '-' . $month . '-01'); $enddate = strtotime($year . '-' . $month . '-' . $day); $currentdate = $startdate; while ($currentdate <= $enddate) { //if not Saturday or Sunday, +1 if (!((date('D', $currentdate) == 'Sat') || (date('D', $currentdate) == 'Sun') )) { $return = $return + 1; } $currentdate = strtotime('+1 day', $currentdate); } //end date walk loop //return the number of working days return $return; } //เรียกใช้งาน echo WorkingDays(2011,4,30); |
ตอนแรกทำการตรวจสอบว่าได้ส่งวันเดือนปีเข้ามาในฟังก์ชั่นหรือเปล่า ถ้าไม่ได้ส่งเข้ามาก็ให้ดีฟอลต์ไว้ที่วันปัจจุบัน
if (!$year) $year = date('Y'); if (!$month) $month = date('m'); if (!$day) $day = date('d'); |
หาวันแรกของเดือน ซึ่งมันจะเป็นวันที่ 1 เสมอ กำหนดให้เป็นตัวเลขวินาที (เพื่อที่จะนำไปเปรียบเทียบกันได้ง่ายๆ) และหาวันสิ้นสุด
$startdate = strtotime($year . '-' . $month . '-01'); $enddate = strtotime($year . '-' . $month . '-' . $day); |
วนลูปจากวันแรกจนไปถึงวันสุดท้าย ภายในลูปทำการตรวจสอบว่าเป็นวันเสาร์-อาทิตย์หรือไม่ ถ้าไม่ใช่ก็ให้ +วันทำงานเข้าไปอีก 1
while ($currentdate <= $enddate) { //if not Saturday or Sunday, +1 if (!((date('D', $currentdate) == 'Sat') || (date('D', $currentdate) == 'Sun') )) { $return = $return + 1; } $currentdate = strtotime('+1 day', $currentdate); } //end date walk loop |
เพียงเท่านี้หลังจากโปรแกรมหลุดออกจากลูปเราก็จะได้จำนวนของวันทำงานแล้ว ง่ายๆใช่มั้ยครับ
คำสั่ง date() ที่ส่ง D เข้าไปมันจะคืนค่าชื่อวันออกมา ชื่อสามตัวแรกนะครับ เพียงเท่านี้เราก็รู้แล้วว่ามันเป็นวันอะไร
date('D', $currentdate) |
Leave a Reply