ทำไมเราจึงอยากจะทราบว่าในเดือนหนึ่งๆมีวันอยู่กี่วัน ?
เท่าที่ผมพอนึกคำตอบได้ตอนนี้ก็คือ เวลาที่ผมได้รับคำสั่งจากหัวหน้าว่าให้ดึงข้อมูลจากฐานข้อมูลออกมาเป็นเดือนๆ วันเริ่มต้นของเดือนนั้นแน่นอนว่ามันจะต้องเป็นวันที่ 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 แบบลูปนั้นเลิกใช้ไปนานแล้ว
gameo says:
22/03/2554 at 22/03/2554
แจ่มเลยครับ แง่มๆ
Noum says:
22/01/2556 at 22/01/2556
ขอบคุณอย่างแรงครับ
ที่ผ่านมาใช้คำสั่งโบราณอยู่เลย 555
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
22/01/2556 at 22/01/2556
ลองไล่ๆอ่านบทความผมดูครับ มีประโยชน์มากมาย