การหา leap year (29 กุมภาพันธ์)

Kritchai Tadbhusinwat
G-Able
Published in
2 min readFeb 24, 2024
Image by Author (generated by AI)

เนื่องจากในปี 2024 นี้เป็นปีที่เดือน กุมภาพันธ์ มี 29 วัน เรียกว่า leap year ในภาษาไทยจะเรียกว่า ปีอธิกสุรทิน [อะ-ทิก-กะ-สุ-ระ-ทิน] (อธิก (เกิน) + สุร (พระอาทิตย์) + ทิน (วัน)

ซึ่งเราอาจจะเคยจำ ๆ กันมาว่าจะเป็นแบบนี้ทุก ๆ 4 ปี แต่ในความจริงแล้วมีรายละเอียดมากกว่านั้น ในบทความนี้จะกล่าวถึงสาเหตุที่มาและวิธีการหาว่าปีใดจะเป็นปี leap year

ระบบปฏิทินที่เราใช้อยู่ในปัจจุบันนั้น ปรับปรุงมาจาก ระบบปฏิทินแบบจูเลียน (Julian Calendar มาจาก Julius Caesar)

image from https://en.wikipedia.org/wiki/Julius_Caesar

โดยจะกำหนดว่า 1 ปี คือการโคจรของโลกรอบดวงอาทิตย์ เพื่อสะดวกต่อการอ้างอิงไปที่ฤดูกาล และนักดาราศาสตร์ ในตอนนั้นคำนวณออกมาว่า โลกจะหมุนรอบตัวเองเป็น 365.25 รอบ จึงกำหนดว่า ใน 1 ปี ให้มี 365 วัน และ ทุก ๆ 4 ปี ให้มี 366 วัน เพื่อชดเชย 0.25 วัน ที่หายไป ทำให้ ทุก ๆ 4 ปี เหมือนเป็นการ reset ตำแหน่งของโลกให้กลับมาจุดเริ่มต้นใหม่

Image by Author (generated by AI)

ส่วนที่ว่า ทำไมต้องไปเพิ่มให้เดือน กุมภาพันธ์ เนื่องจาก ในยุคนั้น เดือนลำดับที่ 11 และ 12 คือ เดือนมกราคม และ กุมภาพันธ์ ตามลำดับ (เดือนมีนาคม คือเดือนแรกของปี) จึงเอาวันที่ต้องการชดเชยไปไว้ท้ายสุดของปี ต่อมามีการจัดลำดับของเดือนใหม่ ให้อ้างอิงกับการเริ่มการทำงานของคณะผู้ปกครองเมือง(คล้ายกับวันเริ่มทำงานของรัฐบาลใหม่) โดยให้เดือนมกราคมเป็นเดือนแรกของปี

แต่ ตัวเลข 365.25 นั้นเป็นเพียงตัวเลขโดยประมาณหากจะคำนวณโดยละเอียดแล้วจะอยู่ที่ 365.242189 ซึ่งจะเป็นผลให้ ระบบปฏิทินนี้ จะคลาดเคลื่อนไป 1 วัน ในทุก ๆ 128 ปี โดยระบบปฏิทินนี้ ถูกใช้ในช่วงปี 45BC — 1582

image from https://en.wikipedia.org/wiki/Pope_Gregory_XIII

ต่อมาได้มีการปรับปรุงระบบปฏิทินกันใหม่อีกรอบ โดยจะเรียกว่า ระบบปฏิทินแบบกริกอเรียน (Gregorian Calendar มาจาก พระสันตะปาปา Gregory XIII) จากระบบปฏิทินแบบเดิม จะพบว่าทุก ๆ 400 ปี จะมี leap year 100 ครั้ง ซึ่งพบว่ามันมากเกินไป ค่าที่คำนวณได้ควรจะเป็น 97 ครั้ง จึงได้กำหนดว่าปีที่ 100 200 300 ไม่เป็นปี leap year (เอาเฉพาะปีที่ 400) เช่น ปี 2100 , 2200 , 2300 , 2500 , 2600 , 2700 , 2900 , 3000 เป็นต้น

image by Author

สามารถเขียนเป็นเงื่อนไขได้ ดังนี้
- ปีที่ หาร 4 ลงตัว และ หาร 100 ไม่ลงตัว
- ปีที่ หาร 400 ลงตัว

โดยสามารถเขียนโปรแกรมเพื่อหา leap year ได้ดังนี้

year = 2024
leap_year = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
print(leap_year) # True

หรือจะใช้ module calendar ได้ดังนี้

import calendar

year = 2024
leap_year = calendar.isleap(year)
print(leap_year) # True

เพิ่มเติม

- ชื่อเดือน July ตั้งชื่อตาม Julius Caesar ซึ่งเกิดในเดือนนี้
- สำหรับในประเทศไทยเริ่มใช้ระบบปฏิทินแบบกริกอเรียนในสมัย ร.5 แต่ตอนนั้นยังใช้เดือนเมษายนเป็นลำดับแรกของปี (เดือนมีนาคมเป็นเดือนสุดท้าย) เพื่อให้ใกล้เคียงกับสงกรานต์ ต่อมาสมัย จอมพล ป. พิบูลสงคราม ได้มีการเปลี่ยนให้เดือนมกราคมเป็นลำดับแรกของปี เมื่อปี พ.ศ. 2483 โดยการตัดเดือน มกราคม กุมภาพันธ์ มีนาคม 2483 (3 เดือนสุดท้ายของปี 2483 ทิ้งไป) แล้วไปเริ่มที่เดือนมกราคม 2484 เลย
จึงเป็นสาเหตุให้ปี พ.ศ.2483 ประเทศไทยจึงมีเพียง 9 เดือน (เมษายน ถึง ธันวาคม)
- การแปลงระหว่าง ค.ศ. — พ.ศ. คือ [พ.ศ. = ค.ศ. + 543] เช่น 2567 = 2024 + 543 เป็นต้น

--

--

Kritchai Tadbhusinwat
G-Able
Writer for

Programmer บริษัทเอกชนที่เป็นส่วนหนึ่งของเบื้องหลังให้กับบริษัทชั้นนำต่าง ๆ และ Tutor สอนกวดวิชาคณิตศาสตร์/ฟิสิกส์ เพื่อเตรียมสอบเข้ามหาวิทยาลัย