สวัสดีปี 2024 ปีที่เดือนกุมภาพันธ์มี 29 วัน และทั้งปีมี 366 วันทำไมถึงเป็นอย่างนั้น ?
Table of contents
Intro
สวัสดีปี 2024 นี่เป็นบทความแรกของปี และปีนี้ก็เป็นปี Leap year ที่จะเกิดขึ้นทุก ๆ 4 ปี ซึ่งภาษาไทยเรียก "ปีอธิกสุรทิน" [อะ-ทิก-กะ-สุ-ระ-ทิน] ที่มีวันทั้งหมด 366 วัน เพราะเดือนกุมภาพันธ์มีการเพิ่ม 1 วันเป็น 29 วัน
TL;DR;
- Leap year หรือ ปี Leap year คือปีที่มีการเพิ่ม 1 วัน
- เดือนกุมภาพันธ์ในปี Leap year มี 29 วัน
- ปีที่มี Leap year จะมี 366 วัน
- ปีที่หารด้วย 4 ลงตัว คือ Leap year เช่น 2018, 2020, 2024
- ปีที่หารด้วย 100 ลงตัว
ไม่ใช่
Leap year เช่น 1700, 1800, 1900 - ปีที่หารด้วย 400 ลงตัว คือ Leap year เช่น 1600, 2000
Leap year
Leap year หรือ ปีอธิกสุรทิน คือปีที่มีการเพิ่ม 1 วัน เพื่อให้ปีปฏิทินสอดคล้องกับปีดาราศาสตร์หรือปีฤดูกาลที่ควรจะเป็นเพื่อไม่ให้คลาดเคลื่อน ซึ่งเลื่อนให้ตรงกับเหตุการณ์เมื่อเวลาผ่านไป โดยปีที่ไม่ใช่ปี Leap year เรียกว่า ปีปกติสุรทิน (Common year)
เมื่อโลกโคจรรอบดวงอาทิตย์ที ่จริงคือ 365.242190 วัน
ด้วยปกติโลกโคจรรอบดวงอาทิตย์ 1 รอบใช้เวลา 365 วัน (1 ปี) แต่ที่จริงคือ 365.242190
วัน (365 วัน 5 ชม. 48 นาที 56 วินาที)
ถ้าปัดทศนิยมก็จะได้ 365.2422
มี 2 เหตุผลว่าทำไมเดือนกุมภาพันธ์มี 29 วัน ในปี 2024:
-
Leap Year: 2024 คือ Leap year นั่นก็หมายความว่ามีวันพิเศษเพิ่มขึ้นมา 1 วัน ที่แตกต่างจากปีปกติ (Common year) โดย 1 วันที่เพิ่มขึ้นมาจำเป็นต้องนับรวมกับวันทั้งหมดของปีปกติ (365 วัน) เพราะโลกโคจรรอบดวงอาทิตย์ (ประมาณ 365.2422 วัน) หากไม่มีปี Leap Year ปฏิทินก็จะค่อย ๆ เคลื่อนไป และไม่สอดคล้องกับฤดูกาล
-
Leap Day: คือวันพิเศษท ี่เพิ่มขึ้นมา 1 วันของ Leap year ซึ่งในเดือนกุมภาพันธ์ตามปกติจะมี 28 วัน แต่เมื่อมี Leap Day ก็ทำให้เดือนกุมภาพันธ์มี 29 วัน โดยการเพิ่มวันของเดือนกุมภาพันธ์ แทนที่จะเป็นเดือนอื่น ถือว่าใช้ได้จริงและไม่รบกวนที่จะสร้างความสับสนกับเดือนอื่น ๆ ได้น้อยกว่า
ประเด็นอื่น ๆ :
- คนบางคนที่เกิดในวันที่ 29 กุมภาพันธ์จะฉลองวันเกิดเฉพาะในปี Leap year เท่านั้น โดยมีอายุเฉลี่ยทุกๆ 4 ปี
- การคำนวณอายุแบบละเอียด (เช่น 27 ปี 6 เดือน 14 วัน) ควรจะบวก Leap year เข้าไปด้วย
โจทย์
1. มาร์คัสเกิดเมื่อวันที่ 29 กุมภาพันธ์ 1992 เขาจะอายุเท่าไหร่ถ้าฉลองวันเกิดเพียงปี Leap year ?
Details
คำตอบ
หากมาร์คัสฉลองวันเกิดเพียงปี Leap year เขาจะมีอายุ 8 ปี Leap year ในปี 2024รายละเอียด:
- มาร์คัสเกิดในปี 1992 ซึ่งเป็นปี Leap year
- ตั้งแต่นั้นมาก็เข้าสู่ปี Leap year 8 ครั้ง คือ 1996, 2000, 2004, 2008, 2012, 2016, 2020 และ 2024 (ปีปัจจุบัน)
- ดังนั้นมาร์คัสจึง "มีอายุ" เพียง 8 ปีเท่านั้นในแง่ของการฉลองวันเกิด
น่าสนใจที่อายุที่แท้จริงของมาร์คัส เมื่อพิจารณาจากจำนวนปีที่ผ่านไปนับตั้งแต่เกิดคือ 32 ปี (1992 - 2024) นั่นหมายความว่าเขา “พลาด” ฉลองวันเกิดถึง 24 ครั้ง!
2. เป็นไปได้ไหมที่ปี Leap year หารด้วย 3, 4, 6 และ 8 ลงตัวจงอธิบาย ?
Details
คำตอบ
มี 2 คำตอบ คือ เป็นไปได้ และเป็นไปไม่ได้ ที่จะเป็นปี Leap year ที่หารด้วย 3, 4, 6 และ 8 ลงตัว!- ปี Leap year คือปีที่มี 366 วัน ซึ่งมากกว่าปีปกติที่มี 365 วันอยู่ 1 วัน
- ตามปฏิทินเกรกอเรียน โดยทั่วไปหนึ่งปีจะเป็นปี Leap year หากหารด้วย 4 ลงตัว อย่างไรก็ตาม มีข้อยกเว้นดังนี้
- ปีที่หารด้วย 100 ลงตัวแต่ไม่ถึง 400 ไม่ใช่ปี Leap year ตัวอย่างเช่น ปี 1900 ไม่ใช่ปี Leap year แต่ปี 2000 เป็นปีนั้น
- ดังนั้นปีที่หารด้วย 4 ลงตัวจึงไม่เพียงพอที่จะทำให้เป็นปี Leap year
ทีนี้ มาวิเคราะห์การหารปี Leap year ด้วย 3, 6 และ 8 ลงตัว:
- คำจำกัดความปี Leap year: ปี Leap year คือปีที่มี 366 วัน แทนที่จะเป็น 365 วันตามปกติ วันพิเศษนี้ถูกเพิ่มเข้าไปเพื่อให้ปีปฏิทิน เพื่อให้สอดคล้องกับการโคจรของโลกรอบดวงอาทิตย์ ซึ่งใช้เวลานานกว่า 365 วันเล็กน้อย
- การหารด้วย 4 ลงตัว: ปัจจัยที่สำคัญที่สุดในการกำหนดปี Leap year คือการหารด้วย 4 ลงตัว ซึ่งปีใดก็ตามที่หารด้วย 4 ลงตัว (ยกเว้นข้อยกเว้นเฉพาะบางประการ) ถือเป็นปี Leap year
- การหารด้วย 3, 6 และ 8 ลงตัว: แม้ว่า 4 จะเป็นปัจจัยสำคัญ แต่การหารด้วย 3, 6 หรือ 8 ลงตัวไม่จำเป็นต้องทำให้ปีเป็นปี Leap year เสมอไปและที่จริงแล้วปี Leap year ดังข้อมูลตัวอย่างตามตารางด้านล่าง
Year | Divisible by 4 | Divisible by 3 | Divisible by 6 | Divisible by 8 | Leap Year? |
---|---|---|---|---|---|
2016 | Yes | Yes | Yes | Yes | Yes |
2000 | Yes | No | No | Yes | Yes |
2008 | Yes | No | No | Yes | Yes |
2012 | Yes | No | No | Yes | Yes |
2020 | Yes | No | No | Yes | Yes |
3000 | Yes | Yes | Yes | Yes | No |
Leap Year With Coding
Leap Year กับการ Coding ที่ไม่เข้าใจ หรือไม่รู้จัก Leap Year ทำให้เกิดปัญหาเมื่อ Coding ดังนี้
- ปฏิทินเดือนกุมภาพันธ์ของปี Leap year มีแค่ 28 วัน
- การคำนวณอายุ เมื่อต้องการเป็นจำนวนแบบ ปี เดือน วัน
- การกำหนดค่าวันที่ตายตัว (Fixed) ไว้ที่โค้ด ทั้ง 28 และ 365 วัน
How to calculate leap years in JavaScript
1. Function with conditional logic:
function isLeapYear(year) {
// A year is a leap year if:
// 1. It is divisible by 4, but not by 100
// 2. It is divisible by 400
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
}
// Example usage:
console.log(isLeapYear(2020)); // true
console.log(isLeapYear(2024)); // true
console.log(isLeapYear(1900)); // false
console.log(isLeapYear(2100)); // false
2. Using the Date object:
function isLeapYearUsingDate(year) {
const date = new Date(year, 1, 29); // February 29th
return date.getMonth() === 1; // If February, it's a leap year
}
// Example usage:
console.log(isLeapYearUsingDate(2020)); // true
console.log(isLeapYearUsingDate(2024)); // true
ประเด็นอื่น ๆ :
- โดยทั่วไปวิธีแรกถือว่ามีประสิทธิภาพมากกว่า เนื่องจากจะใช้กฎปี Leap year โดยตรงโดยใช้การดำเนินการทางคณิตศาสตร์
- วิธีที่สอง แม้จะมีประสิทธิภาพน้อยกว่า แต่ก็มีประโยชน์ในการจัดการการคำนวณวันที่และเวลาที่เกี่ยวข้องกับปี Leap year
- เลือกวิธีการที่เหมาะสมกับการใช้งานและรูปแบบการเขียนโค้ดของคุณมากที่สุด
คีย์ที่สำคัญ:
- ปี Leap year เกิดขึ้นทุกๆ 4 ปี
- ปีที่หารด้วย 4 ลงตัว คือ Leap year เช่น 2018, 2020, 2024
- ปีที่หารด้วย 100 ลงตัว
ไม่ใช่
Leap year เช่น 1700, 1800, 1900 - ปีที่หารด้วย 400 ลงตัว คือ Leap year เช่น 1600, 2000
- วัตถุประสงค์ของปี Leap year คือเพื่อให้ปฏิทินอยู่ในแนวเดียวกับวงโคจรของโลกรอบดวงอาทิตย์
- วิธีการเหล่านี้ใช้ได้กับปฏิทิน Gregorian calendar ซึ่งมีใช้มาตั้งแต่ปี 1582 เท่านั้น
Implement leap year with React
() => { const year = 2024 // Using a function with conditional logic function isLeapYear(year) { // A year is a leap year if: // 1. It is divisible by 4, but not by 100 // 2. It is divisible by 400 return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 } // Using the Date object function isLeapYearUsingDate(year) { const date = new Date(year, 1, 29) // February 29th return date.getMonth() === 1 // If February, it's a leap year } return ( <> {year} is Leap year: {isLeapYear(year).toString()} {/*{year} is Leap year: {isLeapYearUsingDate(year).toString()}*/} </> ) }
สรุป
(Understanding the leap year phenomenon from freeastroscience.com)
ประเด็น Leap year และ Leap Day ควรทำความเข้าใจให้ดี เนื่องเป็นเงื่อนไขที่สำคัญที่ควรนำมาคิด เมื่อมีการคำนวณหรือ Implementation อะไรที่กี่กับวัน และหากละเลยเรื่องนี้ก็จะส่งผลกระทบให้ทำงานผิดพลาดได้
บางครั้งเวลาที่เราจะดูบางระบบ หรือ App ออกแบบมีประสิทธิภาพดีแค่ไหนเรื่อง Leap year ก็เป็นประเด็นที่สามารถนำมาตรวจสอบได้เช่นกัน
References
- https://en.wikipedia.org/wiki/Leap_year
- https://airandspace.si.edu/stories/editorial/science-leap-year
- https://top10sense.com/what-is-the-mean-of-leap-year-why-do-we-need-leap-years/
- https://www.freeastroscience.com/2023/08/understanding-leap-year-phenomenon.html
- https://www.calendar.best/leap-years.html