กลับไปที่บล็อก
2 min read

วิธีการคำนวณอายุใน JavaScript (DOB ถึงปี, เดือน, วัน)

เรียนรู้วิธีการคำนวณอายุจากวันเกิดใน JavaScript ที่ใช้งานได้จริง ประกอบด้วยปี เดือน วัน ตัวเลือก ณ วันที่ และข้อผิดพลาดทั่วไป เช่น เขตเวลาและปีอธิกสุรทิน

วิธีการคำนวณอายุใน JavaScript (DOB ถึงปี, เดือน, วัน)

หากคุณต้องการคำนวณอายุของบุคคลจากวันเกิด (DOB) ใน JavaScript คุณสามารถทำได้หลายวิธี สิ่งสำคัญคือการตัดสินใจว่าคุณหมายถึงอะไรตาม อายุ:

  • อายุในปีที่เสร็จสมบูรณ์ (พบมากที่สุด)
  • อายุที่แน่นอน (ปี เดือน วัน)
  • อายุ ณ วันที่ที่ระบุ (ไม่ใช่วันนี้เสมอไป)

1) คำนวณอายุในปีที่เสร็จสมบูรณ์ (ง่ายและถูกต้อง)

นี่เป็นแนวทางมาตรฐาน: ลบปีแล้วปรับเปลี่ยนหากวันเกิดปีนี้ยังไม่เกิดขึ้น

ฟังก์ชัน ageInYears(dob, asOf = new Date()) {
  const เกิด = วันที่ใหม่ (dob);
  const ref = วันที่ใหม่ (asOf);

  ให้ปี = ref.getFullYear() -birth.getFullYear();
  const m = ref.getMonth() - เกิด.getMonth();

  ถ้า (m < 0 || (m === 0 && ref.getDate() 

ตัวอย่าง: DOB 2000-02-10 และ ณ วันที่ 2026-02-09 ให้ 25 (พรุ่งนี้วันเกิด)

2) คำนวณอายุที่แน่นอน (ปี เดือน วัน)

หากคุณต้องการรายละเอียดที่แน่นอน คุณสามารถคำนวณปีแรก จากนั้นเดือน จากนั้นวันโดยการ "ยืม" จากเดือนก่อนหน้าเมื่อจำเป็น

ฟังก์ชันactAge(dob, asOf = new Date()) {
  const เกิด = วันที่ใหม่ (dob);
  const ref = วันที่ใหม่ (asOf);

  ให้ปี = ref.getFullYear() -birth.getFullYear();
  ให้เดือน = ref.getMonth() -birth.getMonth();
  ให้วัน = ref.getDate() - Birth.getDate();

  // ปรับวันโดยการยืมจากเดือนก่อนหน้า
  ถ้า (วัน < 0) {
    const prevMonth = วันที่ใหม่ (ref.getFullYear(), ref.getMonth(), 0); // วันที่ 0 = วันสุดท้ายของเดือนก่อน
    วัน += prevMonth.getDate();
    เดือน--;
  }

  // ปรับเดือนโดยการยืมจากปีก่อน
  ถ้า (เดือน < 0) {
    เดือน += 12;
    ปี--;
  }

  กลับ { ปี, เดือน, วัน };
}

หมายเหตุ: กรณี Edge ของวันที่ของเดือน (เช่น DOB ในวันที่ 31) จำเป็นต้องมีการทดสอบอย่างรอบคอบ หากคุณต้องการสิ่งที่มีประสิทธิภาพในทุกภาษาและกรณี Edge ให้พิจารณาใช้ไลบรารีวันที่ที่ผ่านการทดสอบอย่างดี

3) ใช้วันที่ "ณ วันที่" สำหรับอายุของวันที่ในอดีตหรือในอนาคต

แอปจำนวนมากต้องมีอายุในวันที่อ้างอิงที่เฉพาะเจาะจง (การประกันภัย กฎการมีสิทธิ์ ตัดรอบปีการศึกษา) ทั้งสองฟังก์ชันด้านบนยอมรับพารามิเตอร์ asOf ดังนั้นคุณจึงสามารถดำเนินการ:

ageInYears('1995-06-20', '2030-01-01');
แน่นอนอายุ('1995-06-20', '2030-01-01');

ข้อผิดพลาดที่พบบ่อย (และวิธีหลีกเลี่ยง)

  • เขตเวลา: การแยกวิเคราะห์ ปปปป-ดด-วว สามารถทำงานแตกต่างกันในสภาพแวดล้อมต่างๆ หากคุณสนใจเฉพาะวันที่ ให้สร้างวันที่ตามเวลาท้องถิ่น: วันที่ใหม่ (ปี, monthIndex, วัน).
  • วันเกิดวันอธิกสุรทิน: ตัดสินใจกฎของคุณสำหรับวันที่ 29 กุมภาพันธ์ในปีที่ไม่ใช่ปีอธิกสุรทิน (28 กุมภาพันธ์หรือ 1 มีนาคม) มีความสม่ำเสมอ
  • อินพุตไม่ถูกต้อง: ตรวจสอบว่า DOB เป็นวันที่จริงและไม่ใช่วันที่ในอนาคต

ตัวเลือกด่วน: ใช้เครื่องคำนวณอายุออนไลน์

หากคุณเพียงต้องการคำตอบ (หรือคุณต้องการตรวจสอบการใช้งานของคุณ) ใช้เครื่องคิดเลขฟรีของเรา: คำนวณอายุออนไลน์.

คำแนะนำที่เกี่ยวข้อง

คำถามที่พบบ่อย

วิธีคำนวณอายุที่แม่นยำที่สุดคืออะไร

สำหรับกรณีส่วนใหญ่ "ปีที่สำเร็จการศึกษา" (อายุในปีที่ครบบริบูรณ์) คือมาตรฐาน หากคุณต้องการรายละเอียดทั้งหมด ให้คำนวณปีก่อน จากนั้นเดือน จากนั้นวัน และทดสอบ Edge Case เช่น ความยาวเดือนและปีอธิกสุรทิน

เหตุใดบางครั้ง JavaScript จึงให้วันที่ไม่ถูกต้องสำหรับสตริงวันที่

เนื่องจาก new Date('YYYY-MM-DD') สามารถตีความได้ว่าเป็น UTC ในบางสภาพแวดล้อม หากคุณสนใจวันที่ในปฏิทินท้องถิ่น ให้แยกวิเคราะห์ส่วนต่างๆ และใช้ new Date(y, m, d).