amor,

ผมเขียนโปรแกรมตัวหนึ่งซึ่งจำเป็นจะต้องคำณวนหาวันหยุดภายในเดือนที่ต้องการ คิดกันง่ายๆว่าหยุดเฉพาะเสาร์-อาทิตย์ วันหยุดพิเศษไม่สนใจ หลังจากที่เขียนออกมาเป็นฟังก์ชั่นแล้ว ก็คิดว่าน้องๆอีกหลายคนอาจจะจำเป็นต้องใช้ ก็เลยเอามาให้ดูกัน อีกอย่างก็เพื่อเป็นแนวทางในการประยุกต์ใช้คำสั่ง 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)