ความสงสัยที่ว่าปีไหนบ้างที่เดือนกุมภาพันธ์จะมี 28 วัน และปีไหนบ้างที่เดือนกุมภาพันธ์จะมี 29 วันนี้เป็นสิ่งที่ผมได้ให้ความสนใจเป็นพิเศษหลังจากที่ได้เขียน web application แล้วต้องตรวจสอบข้อมูลที่รับเข้ามาว่าถูกต้องหรือไม่เช่น สมาิชิกคนหนึ่งกรอกข้อมูล วันเดือนปีเกิด เป็น 29/02/2009 ซึ่งเป็นข้อมูลที่ผิด เพราะปี 2009 เดือนกุมภาพันธ์มีแค่ 28 วัน 5555555+ เอาล่ะสิ แล้วตูจะรูได้ยังไงหว่าาาา ว่าวันที่เค้ากรอกมาเป็นวันที่ถูกต้องแล้ว....ซวยแล้วสิทีนี้

      หลังจากหาข้อมูลอยู่สักพักก็สรุปได้ว่า ปีที่มีวันเพิ่มมานั้นเราเรียกกันว่า “อธิกสุรทิน” ซึ่งแปลว่า “วันเกิน” ขณะที่ฝรั่งใช้คำว่า “ลีป" (leap) ที่หมายถึงการกระโดดหรือข้าม (ซึ่งเรียกกันทั้ง ลีปเดย์-leap day ที่หมายถึงวันที่ 29 ก.พ. หรือ ลีปเยียร์-leap year ที่หมายถึงปีที่มีวันที่ 29 ก.พ.) และสัญญลักษณ์แห่งปีกระโดดที่พวกเขาใช้คือ "กบ"

      ส่วนเราจะหาว่าปีไหนบ้างที่มีเดือนกุมภาพันธ์ได้ 29 วัน มีกฎง่ายๆ(รึเปล่า?) คือ
ปีคริสตศักราชที่หารด้วย 4 ลงตัว (ปีนี้ปี 2009 หารไม่ลงตัว)
แต่ 99% ของกฎในสากลโลกต้องมีข้อยกเว้น..
นั่นก็คือ ปีที่หารด้วย 100 ลงตัวไม่ต้องเพิ่มวันที่ 29 เข้าไป
(อย่างปี 1900 และ 1800 ก็หารด้วย 4 ลงตัวและหารด้วย 100 ลงตัว ดังนั้นจึงไม่ต้องเพิ่มวันที่ 29 ลงไป)
      
      ...แต่นั่นหาใช่สิ้นสุดไม่...
เพราะมีข้อยกเว้นของข้อยกเว้นบอกอีกว่า... แม้ จะผ่านด่านหารด้วย 4 และ 100 ลงตัวแล้วก็ตาม แต่ถ้าปีนั้นเกิดหารด้วย 400 ลงตัว ให้กลับไปใช้หลักการแรกสุด นั่นคือ เพิ่มวันที่ 29 เข้าไปด้วย
(อย่างปี 2000 และ 1600 หาร 4 ลงตัว, หาร 100 ก็ลงตัว ทว่ายังหารด้วย 400 ลงตัว ดังนั้นจึงเพิ่มวันที่ 29 ได้)
      
เรื่องนี้มีคำอธิบาย...
      
จากหลักการที่ว่า โลกโคจรรอบดวงอาทิตย์ 1 รอบกินเวลา 365.25224 วัน หรือ 365 กับอีกประมาณ ¼ วัน ซึ่งปีปกติที่มี 365 วันก็จะทำให้เวลาขาดไปประมาณ ¼ วัน ดังนั้นจึงต้องทดไว้ เมื่อทดครบ 4 ปีก็จะได้เท่ากับประมาณ 1 วัน จึงทำให้ต้องเพิ่ม 1 ปีมี 366 วันในทุกๆ 4 ปี
      
คราวนี้ถ้าทุกๆ 4 ปีมีวันเกินมา 1 วัน เมื่อถึง 400 ปีหรือครบ 100 รอบจะมีวันเกินไปอีก 3.104 วัน (เพราะ อีก 1 วันในทุกๆ 4 ปีเป็นเวลาโดยประมาณ) ดังนั้นในรอบทุกๆ 400 ปีจะต้องลดวันลงไป 3 วัน ก็เลยกำหนดให้ปีที่ครบร้อยแต่หาร 400 ไม่ลงตัว ไม่ต้องเพิ่มวันตามข้อยกเว้นที่กล่าวมา จึงจะเป็นการนับวันเวลาได้ใกล้เคียงกับวัฎจักรโลกและดวงอาทิตย์มากที่สุด
      อย่างไรก็ดี ด้วยหลักการนี้เมื่อครบรอบ 10,000 ปี วันในปฏิทินจะผิดจากความเป็นจริงไปอีก 3 วัน แต่อีกตั้งหมื่นปี...อืม....เอาไว้แค่นี้ก่อนล่ะกัน เอิ๊กๆๆๆ 

 

สรุปก็คือว่าปีที่มีจะมี 29 วันในเดือนกุมภาพันธ์คือปีค.ศ ที่หารด้วย 4 ลงตัว และต้องเป็นปีที่หารด้วย 100 ไม่ลงตัวหรือถ้าหาร 100 ลงตัว แต่หารด้วย 400 ลงตัวก็มี 29 วันเช่นกันครับ

ไหนๆก็ไหนๆ แล้วเขียน javascript function เอาไ้ว้เลยล่ะกันจะได้เอาไปใช้ได้เลยเผื่อจำเป็น

<script language="javascript" type="text/javascript">

  function getDaysInFebruary (p_iYearEng)
  {
    var numDays = 28 ;
    if (((p_iYearEng) % 4 == 0) && ( (!((p_iYearEng) % 100 == 0)) || ((p_iYearEng) % 400 == 0))){
      numDays = 29 ;
    }
    return numDays ;
  }
</script> 

 ถ้ามีอะไรเพิ่มเติมหรือมีข้อแนะนำก็ comment ได้เลยนะครับ 

 

Comment

Comment:

Tweet