เครื่องคำนวณอายุ — อายุที่แน่นอนเป็นปี เดือน และวัน
เครื่องคำนวณอายุฟรี: ป้อนวันเกิด เพื่อให้ได้อายุที่แน่นอนเป็นปี เดือน และวัน รวมทั้งสัปดาห์ วัน ชั่วโมง ทั้งหมด และวันเกิดครั้งถัดไป
เครื่องคำนวณอายุ
คุณเกิดในวัน Monday
วันเกิดครั้งถัดไป: 144 วันข้างหน้า (จะถึง 37)
อายุของคุณในหน่วยอื่น
ความก้าวหน้าของชีวิต
อายุของคุณเทียบกับช่วงอ้างอิง 80 ปีเพื่อประกอบการอธิบาย
เอกสารประกอบการใช้งาน
เครื่องคำนวณนี้ทำอะไร
พิมพ์วันเกิดของคุณ และมันจะบอกคุณว่าคุณอายุเท่าไหร่แน่นอน — เป็นปี เดือน และวัน — แบบเดียวกับที่คุณจะพูดออกมา ("ฉันอายุ 33 ปี 4 เดือน 5 วัน") นอกจากนี้ยังแสดงอายุเดียวกันนั้นคิดเป็นเดือน สัปดาห์ วัน ชั่วโมง นาที และวินาที วันในสัปดาห์ที่คุณเกิด และระยะเวลาจนถึงวันเกิดของคุณครั้งถัดไป
ปล่อยให้ช่องที่สองเป็นวันนี้เพื่อให้ได้อายุปัจจุบันของคุณ หรือเปลี่ยนเป็นวันใดก็ได้ในอดีตหรืออนาคตเพื่อค้นหาอายุของคุณในวันนั้น
กฎข้อหนึ่งที่ทำให้การคำนวณอายุยุ่งยาก: เดือนและปีไม่ได้มีจำนวนวันคงที่ กุมภาพันธ์มี 28 หรือ 29 วัน เดือนอื่นมี 30 หรือ 31 วัน ดังนั้น "1 เดือน" หมายถึง "วันที่เดียวกัน เดือนต่อมา" — ไม่ใช่ "30 วัน" เครื่องคำนวณนี้ทำตามกฎปฏิทิน ซึ่งเป็นเหตุว่าทำไมมันจึงอาจแตกต่างไปหนึ่งหรือสองวันจากเครื่องมือที่แค่หารด้วย 30 หรือ 365
วิธีการคำนวณอายุ
อายุคือช่องว่างระหว่างสองวัน มีสองวิธีซื่อสัตย์ในการวัดช่องว่างนั้น และเครื่องมือนี้แสดงทั้งสอง
1. อายุตามปฏิทิน (ปี เดือน วัน) นับปีเต็มตั้งแต่วันเกิด จากนั้นนับเดือนเต็ม จากนั้นนับวันที่เหลือ:
- นับจำนวนปีเต็มตั้งแต่เกิด
- จากวันเกิดครั้งสุดท้าย นับจำนวนเดือนเต็ม
- จากที่นั่น นับวันที่เหลือ
ส่วนที่ละเอียดอ่อนคือขั้นตอนที่ 3 ใกล้กับขอบเขตของเดือน บุคคลที่เกิดเมื่อ31 มกราคม วัดเมื่อ1 มีนาคม อายุ1 เดือน 1 วัน — เพราะว่า "หนึ่งเดือนหลังจาก 31 มกราคม" ลงจอดบน 28/29 กุมภาพันธ์ (ไม่มี 31 กุมภาพันธ์) และ 1 มีนาคม คือหนึ่งวันหลังจากนั้น เครื่องคำนวณนี้จะจำกัดไว้ที่สิ้นสุดของเดือนที่สั้นกว่า ตรงกับกฎ dateutil.relativedelta ที่ใช้อย่างแพร่หลาย ดังนั้นวันเกิดสิ้นเดือนจึงไม่ให้การนับวันเป็นลบ
2. เวลาที่ผ่านไปทั้งหมด (วัน ชั่วโมง วินาที) สำหรับตัวเลข "อายุของคุณในหน่วยอื่น" ให้แปลงสองวันเป็นการนับจำนวนวันเต็ม และคูณออก:
ทั้งสองวันถูกยึดไว้ที่เที่ยงคืน UTC ก่อน ดังนั้นการเปลี่ยนแปลงการประหยัดแสง วันจึงไม่สามารถเพิ่มหรือลดชั่วโมง และทำให้การนับวันเสียหาย สัปดาห์คือวัน ÷ 7 (ปัดลง); ชั่วโมง นาที และวินาที เป็นการนับวันที่ปรับขนาด
ทำไมไม่แค่หารวันด้วย 365? เพราะคุณจะลอย การหาร 7,305 วันด้วย 365 ได้ 20.01 ปี; หารด้วย 365.25 ได้ 20.00 — แต่ไม่มีตัวไหนรู้ปีไหนที่เป็นปีอธิกสุรทิน หรือเดือนไหนที่คุณอาศัยอยู่จริงๆ การนับปฏิทินนั้นแม่นยำ; การหารวันนั้นเป็นการประมาณ ใช้อายุปฏิทินสำหรับ "ฉันอายุเท่าไหร่" และ วันทั้งหมด/สัปดาห์ สำหรับการทำงานที่ผ่านมาในเวลาที่ชัดเจน (การจัดเวลายา ระยะเวลาโครงการ นับถอยหลังไมล์ฝั่ง)
ตัวอย่างที่ได้งาน
เกิด1 มกราคม 2000 วัด1 มกราคม 2020:
| วัด | ค่า |
|---|---|
| อายุตามปฏิทิน | 20 ปี 0 เดือน 0 วัน |
| วันรวม | 7,305 |
| สัปดาห์รวม | 1,043 |
| วันในสัปดาห์ที่เกิด | วันเสาร์ |
7,305 วัน = 20 × 365 + 5 วันอธิกสุรทิน (2000, 2004, 2008, 2012, 2016) รายละเอียดเดียวนี้ — วันพิเศษห้าวันที่คนส่วนใหญ่ลืม — คือเหตุผลที่ทำให้เครื่องคำนวณนั้นดีกว่าการคำนวณทางจิต
อายุในรหัส
การคำนวณเดียวกันในแต่ละภาษา สำหรับอายุตามปฏิทิน ให้ใช้ห้องสมุดวันที่ในตัว มากกว่าเลขคณิตที่หมุนด้วยมือ — มันรู้ว่าปีอธิกสุรทิน และระยะเวลาของเดือนอยู่แล้ว
1' Whole days between two dates (A1 = birth, B1 = target):
2=B1-A1
3
4' Calendar age in complete years / months / leftover days:
5=DATEDIF(A1, B1, "y") & " years, " & DATEDIF(A1, B1, "ym") & " months, " & DATEDIF(A1, B1, "md") & " days"
61from dateutil.relativedelta import relativedelta
2from datetime import date
3
4birth, target = date(2000, 1, 1), date(2020, 1, 1)
5
6age = relativedelta(target, birth) # calendar age
7print(f"{age.years}y {age.months}m {age.days}d")
8
9total_days = (target - birth).days # total elapsed days
10print(total_days) # 7305
111function calendarAge(birth, target) {
2 let months = (target.getUTCFullYear() - birth.getUTCFullYear()) * 12
3 + (target.getUTCMonth() - birth.getUTCMonth());
4 const anchor = new Date(Date.UTC(birth.getUTCFullYear(), birth.getUTCMonth() + months, birth.getUTCDate()));
5 if (anchor > target) months--;
6 return { years: Math.floor(months / 12), months: months % 12 };
7}
8
9const birth = new Date(Date.UTC(2000, 0, 1));
10const target = new Date(Date.UTC(2020, 0, 1));
11const totalDays = Math.floor((target - birth) / 86400000); // 7305
121import java.time.LocalDate;
2import java.time.Period;
3import java.time.temporal.ChronoUnit;
4
5LocalDate birth = LocalDate.of(2000, 1, 1);
6LocalDate target = LocalDate.of(2020, 1, 1);
7
8Period age = Period.between(birth, target); // 20y 0m 0d
9long totalDays = ChronoUnit.DAYS.between(birth, target); // 7305
101using System;
2
3var birth = new DateTime(2000, 1, 1);
4var target = new DateTime(2020, 1, 1);
5
6int years = target.Year - birth.Year;
7if (birth.AddYears(years) > target) years--; // not birthday yet
8long totalDays = (target - birth).Days; // 7305
91#include <chrono>
2using namespace std::chrono;
3
4// C++20 calendar types
5sys_days birth = year{2000}/1/1;
6sys_days target = year{2020}/1/1;
7
8auto total_days = (target - birth).count(); // 7305
9years_months_days ymd_diff{birth, target}; // year_month_day arithmetic
101package main
2
3import "time"
4
5func main() {
6 birth := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)
7 target := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
8 totalDays := int(target.Sub(birth).Hours() / 24) // 7305
9 _ = totalDays
10}
111use chrono::{NaiveDate, Datelike};
2
3let birth = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap();
4let target = NaiveDate::from_ymd_opt(2020, 1, 1).unwrap();
5
6let total_days = (target - birth).num_days(); // 7305
7let years = target.year() - birth.year(); // adjust if birthday not reached
81<?php
2$birth = new DateTime('2000-01-01');
3$target = new DateTime('2020-01-01');
4$diff = $birth->diff($target);
5
6echo "{$diff->y}y {$diff->m}m {$diff->d}d\n"; // 20y 0m 0d
7echo $diff->days; // 7305
81require 'date'
2
3birth = Date.new(2000, 1, 1)
4target = Date.new(2020, 1, 1)
5
6total_days = (target - birth).to_i # 7305
7years = target.year - birth.year
8years -= 1 if birth.next_year(years) > target
91birth <- as.Date("2000-01-01")
2target <- as.Date("2020-01-01")
3
4total_days <- as.integer(target - birth) # 7305
5คำถามที่พบบ่อย
ฉันอายุเท่าไหร่แน่นอน? ป้อนวันเกิดของคุณ และปล่อยให้เป้าหมายเป็นวันนี้ เครื่องคำนวณแสดงอายุของคุณเป็นปี เดือน และวัน และทำซ้ำเป็นวันรวม สัปดาห์ ชั่วโมง และวินาที
ทำไมอายุของฉันจึงแตกต่างจากเครื่องคำนวณอื่น? เกือบทุกครั้งคือเศษเดือน/วัน เครื่องมือต่างกันในวิธีการนับวันหลังเดือนเต็มที่ขอบเขตของเดือน อันนี้จะจำกัดไว้ที่เดือนที่สั้นกว่า (อนุสัญญา relativedelta); เครื่องมือที่หารด้วย 30 จะแตกต่างไปหนึ่งหรือสองวัน
มันรับมือกับปีอธิกสุรทินและวันเกิด 29 กุมภาพันธ์หรือไม่? ใช่ การนับวันรวมการนับจำนวนทุกวันอธิกสุรทินในช่วง และวันเกิด 29 กุมภาพันธ์จะวัดเทียบกับ 28 ก.พ. / 1 มี.ค. ในปีที่ไม่เป็นปีอธิกสุรทินโดยไม่เกิน
ฉันสามารถคำนวณอายุในวันที่ผ่านมาหรืออนาคตได้หรือไม่? ใช่ — ตั้งค่าช่อง "อายุตามวันที่" เป็นวันใดก็ได้ วันที่ในอนาคตบอกคุณว่าคุณจะอายุเท่าไหร่ตอนนั้น; วันที่ผ่านมา คุณมีอายุเท่าไหร่
แล้วเขตเวลาล่ะ? วันที่จะถูกทำให้เป็นปกติเป็น UTC ก่อนที่จะนับ ดังนั้นทั้งหมดในแต่ละวันจึงมีเสถียรภาพโดยไม่คำนึงว่าคุณอยู่ที่ใดหรือว่าการประหยัดแสง เปลี่ยนแปลงไป
แหล่งที่มา
- Python
dateutil—relativedelta(กฎเดือน/วันอายุปฏิทินที่เครื่องมือนี้ปฏิบัติตามแบบการ) - Java Platform —
Period.betweenและChronoUnit.DAYS - Microsoft Excel —
DATEDIFfunction - MDN Web Docs —
Date - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.