ทำไมเราจึงอยากจะทราบว่าในเดือนหนึ่งๆมีวันอยู่กี่วัน ?

เท่าที่ผมพอนึกคำตอบได้ตอนนี้ก็คือ เวลาที่ผมได้รับคำสั่งจากหัวหน้าว่าให้ดึงข้อมูลจากฐานข้อมูลออกมาเป็นเดือนๆ วันเริ่มต้นของเดือนนั้นแน่นอนว่ามันจะต้องเป็นวันที่ 1 ล้านเปอร์เซ็นต์อยู่แล้ว แต่วันสุดท้ายของเดือนนี่สิ บางทีมันก็เป็น 28,29,30 หรือ 31 ไม่แน่ไม่นอนขึ้นอยู่กับเดือนนั้นเป็นเดือนอะไร เราจึงต้องการวิธีหาวันสุดท้ายของเดือน เพื่อให้ทราบว่าในเดือนนั้นๆ มีกี่วัน ตั้งแต่วันที่ 1 ถึงวันที่เท่าไร

วิธีการที่เคยผ่านมาในประสบการณ์เห็นจะมีอยู่ 3 วิธี

1. ใช้ลูป เพิ่มวันในเดือนที่ต้องการขึ้นไปทีละ 1 แล้วใช้คำสั่งคอยเช็กว่ามันเปลี่ยนเป็นเดือนใหม่หรือยัง ถ้าเปลี่ยนเป็นเดือนใหม่แล้ว แสดงว่าวันก่อนหน้าเมื่อกี้ คือวันสุดท้ายของเดือนที่ต้องการ
แต่วิธีการนี้ผมขอตัดทิ้งไม่อธิบาย เพราะเป็นวิธีที่เยิ่นเย้อ และโบราณมาก

2. ใช้คำสั่ง cal_info() คำสั่งนี้จะคืนค่ากลับมาเป็นอะเรย์ หนึ่งตัวในนั้นคือจำนวนวันของเดือน ซึ่งเป็นสิ่งที่เราต้องการ
พารามิเตอร์ของคำสั่ง cal_info() มีแค่ตัวเดียวคือเราต้องส่งระบบปฏิทินเข้าไป อาจจะใช้ตัวแปร constant ที่เขามีให้มาแล้วหรือตัวเลขก็ได้

0 or CAL_GREGORIAN – ใช้ปฎิทินระบบ Gregorian
1 or CAL_JULIAN – ใช้ปฎิทินระบบ Julian
2 or CAL_JEWISH – ใช้ปฎิทินระบบ Jewish
3 or CAL_FRENCH – ใช้ปฎิทินระบบ French Revolutionary

ตัวอย่างการใช้งาน

<?php
$info = cal_info(0);
var_dump($info);
?>

หรือ

<?php
$info = cal_info(CAL_GREGORIAN);
var_dump($info);
?>

ค่าที่ได้จากคำสั่งนี้จะเป็นอะเรย์ดังนี้

array(5) {
  ["months"]=>
  array(12) {
    [1]=>
    string(7) "January"
    [2]=>
    string(8) "February"
    [3]=>
    string(5) "March"
    [4]=>
    string(5) "April"
    [5]=>
    string(3) "May"
    [6]=>
    string(4) "June"
    [7]=>
    string(4) "July"
    [8]=>
    string(6) "August"
    [9]=>
    string(9) "September"
    [10]=>
    string(7) "October"
    [11]=>
    string(8) "November"
    [12]=>
    string(8) "December"
  }
  ["abbrevmonths"]=>
  array(12) {
    [1]=>
    string(3) "Jan"
    [2]=>
    string(3) "Feb"
    [3]=>
    string(3) "Mar"
    [4]=>
    string(3) "Apr"
    [5]=>
    string(3) "May"
    [6]=>
    string(3) "Jun"
    [7]=>
    string(3) "Jul"
    [8]=>
    string(3) "Aug"
    [9]=>
    string(3) "Sep"
    [10]=>
    string(3) "Oct"
    [11]=>
    string(3) "Nov"
    [12]=>
    string(3) "Dec"
  }
  ["maxdaysinmonth"]=>
  int(31)
  ["calname"]=>
  string(9) "Gregorian"
  ["calsymbol"]=>
  string(13) "CAL_GREGORIAN"
}

ตัวแปร $info[‘maxdaysinmonth’] เก็บค่าจำนวนวันของเดือนปัจจุบันไว้ และถ้าท่านสังเกตท่านจะเห็นว่าคำสั่งนี้คืนค่าชื่อเดือนทั้งแบบตัวเต็มและแบบตัวย่อมาให้ด้วย เพราะฉะนั้นถ้าท่านต้องการจะใช้ชื่อเดือนต่อไปก็ไม่จำเป็นจะต้องมานั่งพิมพ์เองหรอกครับ เอามาจากฟังก์ชั้นนี้แหละ

ข้อจำกัดอย่างหนึ่งของฟังก์ชั่นนี้ก็คือ มันหาค่าจำนวนวันของเดือนปัจจุบันได้เท่านั้น แต่ถ้าท่านต้องการจะหาจำนวนวันของเดือนปัจจุบันอยู่แล้ว มันก็ไม่ใช่ข้อจำกัดแต่อย่างไร

ปฎิทินที่เราใช้ๆกันอยู่เป็นระบบปฎิทินแบบ Gregorian เพราะฉะนั้น เวลาที่เราใช้คำสั่ง cal_info() ให้ส่งค่า 0 หรือ CAL_GREGORIAN เป็นพารามิเตอร์

คำสั่ง var_dump() เป็นคำสั่งที่ใช้สำหรับดูค่าในตัวแปร

ผมยอมรับตามตรงว่าผมยังไม่ได้ศึกษาเลยว่า ระบบในปฎิทินในโลกนี้มีทั้งหมดกี่ระบบ

3. ใช้ฟังก์ชั่น cal_days_in_month() ฟังก์ชั่นนี้สามารถหาค่าจำนวนวันของเดือนไหน ปีไหนก็ได้ โดยเราจะต้องส่งพารามิเตอร์ไปให้มัน 3 ตัว

– ระบบปฎิทิน ซึ่งเราจะส่งตัวแปร constant CAL_GREGORIAN เข้าไป
– เลขเดือน
– เลขปี

ตัวอย่างการใช้งาน

<?php
$info = cal_days_in_month( CAL_GREGORIAN , 3 , 2011 ) ;
 
echo $info ;
?>

โดยส่วนตัวผมเอง ผมใช้วิธีในข้อที่ 3 นี้แทบทุกครั้ง ส่วนข้อ 1 แบบลูปนั้นเลิกใช้ไปนานแล้ว