Skip to main content

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

· 8 min read

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​

แชร์บทความ
☕

เนื้อหานี้มีประโยชน์ไหม? ช่วยสนับสนุนค่ากาแฟให้ผู้เขียนสักแก้ว

Buy Me a Coffee
Loading...