Skip to main content

สวัสดีปี 2024 ปีที่เดือนกุมภาพันธ์มี 29 วัน และทั้งปีมี 366 วันทำไมถึงเป็นอย่างนั้น ?

Kongvut Sangkla
Tags:

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.2422 วัน

ด้วยปกติโลกโคจรรอบดวงอาทิตย์ 1 รอบใช้เวลา 365 วัน (1 ปี) แต่ที่จริงคือ 365.242190 วัน (365 วัน 5 ชม. 48 นาที 56 วินาที)

ถ้าปัดทศนิยมก็จะได้ 365.2422

มี 2 เหตุผลว่าทำไมเดือนกุมภาพันธ์มี 29 วัน ในปี 2024:

  1. Leap Year: 2024 คือ Leap year นั่นก็หมายความว่ามีวันพิเศษเพิ่มขึ้นมา 1 วัน ที่แตกต่างจากปีปกติ (Common year) โดย 1 วันที่เพิ่มขึ้นมาจำเป็นต้องนับรวมกับวันทั้งหมดของปีปกติ (365 วัน) เพราะโลกโคจรรอบดวงอาทิตย์ (ประมาณ 365.2422 วัน) หากไม่มีปี Leap Year ปฏิทินก็จะค่อย ๆ เคลื่อนไป และไม่สอดคล้องกับฤดูกาล

  2. 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 ดังข้อมูลตัวอย่างตามตารางด้านล่าง
YearDivisible by 4Divisible by 3Divisible by 6Divisible by 8Leap Year?
2016YesYesYesYesYes
2000YesNoNoYesYes
2008YesNoNoYesYes
2012YesNoNoYesYes
2020YesNoNoYesYes
3000YesYesYesYesNo

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:

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;
}

// 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:

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

Live Editor
() => {
  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()}*/}
    </>
  )
}
Result
Loading...

สรุป

Understanding the leap year phenomenon (Understanding the leap year phenomenon from freeastroscience.com)

ประเด็น Leap year และ Leap Day ควรทำความเข้าใจให้ดี เนื่องเป็นเงื่อนไขที่สำคัญที่ควรนำมาคิด เมื่อมีการคำนวณหรือ Implementation อะไรที่กี่กับวัน และหากละเลยเรื่องนี้ก็จะส่งผลกระทบให้ทำงานผิดพลาดได้

บางครั้งเวลาที่เราจะดูบางระบบ หรือ App ออกแบบมีประสิทธิภาพดีแค่ไหนเรื่อง Leap year ก็เป็นประเด็นที่สามารถนำมาตรวจสอบได้เช่นกัน

References

Loading...