Αριθμομηχανή Ηλικίας — Ακριβής Ηλικία σε Χρόνια, Μήνες & Ημέρες
Δωρεάν αριθμομηχανή ηλικίας: εισάγετε την ημερομηνία γέννησής σας για να λάβετε την ακριβή ηλικία σας σε χρόνια, μήνες και ημέρες, συν συνολικές εβδομάδες, ημέρες, ώρες και τα επόμενα γενέθλιά σας.
Αριθμομηχανή Ηλικίας
Γεννήθηκες σε ένα Monday
Επόμενα γενέθλια: 127 ημέρες μακριά (γίνεσαι 37)
Η ηλικία σας σε άλλες μονάδες
Πρόοδος ζωής
Η ηλικία σας σε σχέση με μια αποδεικτική περίοδο αναφοράς 80 ετών.
Τεκμηρίωση
Τι είναι ένας υπολογιστής ηλικίας;
Ένας υπολογιστής ηλικίας βρίσκει τον ακριβή χρόνο μεταξύ δύο ημερομηνιών: μιας ημερομηνίας γέννησης και μιας ημερομηνίας-στόχου, συνήθως της σημερινής ημερομηνίας. Παρουσιάζει το αποτέλεσμα σε έτη, μήνες και ημέρες, καθώς και ως συνολικό αριθμό μηνών, εβδομάδων, ημερών, ωρών, λεπτών και δευτερολέπτων. Η ηλικία μπορεί επίσης να υπολογιστεί για μια ημερομηνία στο παρελθόν ή στο μέλλον, δείχνοντας πόσο χρονών ήταν ή θα είναι ένα άτομο εκείνη την ημέρα.
Πώς υπολογίζεται η ηλικία
Η ηλικία είναι η διαφορά μεταξύ δύο ημερολογιακών ημερομηνιών. Υπάρχουν δύο σωστοί τρόποι περιγραφής αυτής της διαφοράς και καθένας είναι χρήσιμος για διαφορετικούς σκοπούς.
Ηλικία ημερολογίου (έτη, μήνες, ημέρες)
Αυτός είναι ο καθημερινός τρόπος με τον οποίο οι άνθρωποι δηλώνουν την ηλικία τους, όπως «33 ετών, 4 μηνών και 5 ημερών». Υπολογίζεται σε τρία βήματα:
- Μετρήστε τα πλήρη έτη που έχουν περάσει από την ημερομηνία γέννησης.
- Από τα πιο πρόσφατα γενέθλια, μετρήστε τους πλήρεις μήνες που έχουν περάσει.
- Από εκεί, μετρήστε τις υπόλοιπες ημέρες.
Το βήμα 3 γίνεται δύσκολο προς το τέλος ενός μήνα, επειδή οι μήνες δεν έχουν όλοι τον ίδιο αριθμό ημερών. Κάποιος που γεννήθηκε στις 31 Ιανουαρίου και του οποίου η ηλικία μετριέται την 1 Μαρτίου είναι 1 μηνός και 1 ημέρας. Έναν μήνα μετά τις 31 Ιανουαρίου είναι η 28 Φεβρουαρίου (ή η 29 Φεβρουαρίου σε δίσεκτο έτος), επειδή δεν υπάρχει 31 Φεβρουαρίου. Η 1 Μαρτίου είναι μία ημέρα μετά. Αυτή η μέθοδος, που μερικές φορές ονομάζεται κανόνας relativedelta από τη βιβλιοθήκη Python που την έκανε δημοφιλή, περιορίζει την ημερομηνία επετείου στην τελευταία ημέρα του συντομότερου μήνα, ώστε ο αριθμός των ημερών να μην γίνεται ποτέ αρνητικός.
Συνολικός χρόνος που έχει παρέλθει (ημέρες, ώρες, δευτερόλεπτα)
Για ακριβή καταμέτρηση του χρόνου ζωής, και οι δύο ημερομηνίες μετατρέπονται σε ένα μοναδικό χρονικό σημείο και υπολογίζεται η διαφορά σε πλήρεις ημέρες:
όπου d είναι ο αριθμός των πλήρων ημερών, t η ημερομηνία-στόχος και b η ημερομηνία γέννησης, καθεμία εκφρασμένη ως πλήθος χιλιοστών του δευτερολέπτου, και ο διαιρέτης είναι ο αριθμός των χιλιοστών του δευτερολέπτου σε μία ημέρα.
Και οι δύο ημερομηνίες ορίζονται στα μεσάνυχτα UTC (Συντονισμένη Παγκόσμια Ώρα) πριν από την αφαίρεση. Έτσι αποτρέπεται η θερινή ώρα από το να προσθέσει ή να αφαιρέσει μία ώρα και να αλλοιώσει τον υπολογισμό των ημερών. Από το σύνολο των ημερών, οι εβδομάδες προκύπτουν διαιρώντας τις ημέρες με 7 και στρογγυλοποιώντας προς τα κάτω. Οι ώρες, τα λεπτά και τα δευτερόλεπτα προκύπτουν πολλαπλασιάζοντας τον αριθμό των ημερών με 24, 1.440 και 86.400.
Η διαίρεση του συνολικού αριθμού ημερών με 365 ή 365,25 δίνει μια κατά προσέγγιση ηλικία σε έτη, αλλά δεν λαμβάνει υπόψη ποια έτη του διαστήματος ήταν δίσεκτα. Η καταμέτρηση με βάση το ημερολόγιο, όπως περιγράφηκε παραπάνω, είναι ακριβής. Χρησιμοποιήστε την ηλικία ημερολογίου για να απαντήσετε στο «πόσο χρονών είμαι». Χρησιμοποιήστε το σύνολο των ημερών ή των εβδομάδων για εργασίες που απαιτούν ακριβή χρόνο που έχει παρέλθει, όπως τον καθορισμό των διαστημάτων λήψης φαρμάκων ή την αντίστροφη μέτρηση έως ένα ορόσημο.
Λυμένο παράδειγμα
Ένα άτομο που γεννήθηκε την 1 Ιανουαρίου 2000, με την ηλικία να μετριέται την 1 Ιανουαρίου 2020:
| Μέτρηση | Τιμή |
|---|---|
| Ηλικία ημερολογίου | 20 έτη, 0 μήνες, 0 ημέρες |
| Συνολικοί μήνες | 240 |
| Συνολικές εβδομάδες | 1.043 |
| Συνολικές ημέρες | 7.305 |
| Συνολικές ώρες | 175.320 |
| Συνολικά λεπτά | 10.519.200 |
| Συνολικά δευτερόλεπτα | 631.152.000 |
| Ημέρα της εβδομάδας γέννησης | Σάββατο |
Το σύνολο των 7.305 ημερών ισούται με 20 × 365 συν 5 επιπλέον ημέρες λόγω δίσεκτων ετών, συγκεκριμένα των ετών 2000, 2004, 2008, 2012 και 2016. Καθένα από αυτά τα έτη πρόσθεσε έναν 29 Φεβρουάριο που περιλαμβάνεται στο διάστημα των 20 ετών. Γι’ αυτό ο αριθμός των ημερών είναι μεγαλύτερος από ένα απλό 20 × 365 και γι’ αυτό είναι εύκολο ο χειροκίνητος υπολογισμός να αποκλίνει κατά λίγες ημέρες.
Τύπος υπολογισμού ηλικίας σε κώδικα
Η μέθοδος υπολογισμού της ηλικίας ημερολογίου που περιγράφηκε παραπάνω μπορεί να υλοποιηθεί στις περισσότερες γλώσσες προγραμματισμού. Η χρήση μιας ενσωματωμένης βιβλιοθήκης ημερομηνιών είναι ασφαλέστερη από τη χειροκίνητη υλοποίηση των κανόνων για τα δίσεκτα έτη και τη διάρκεια των μηνών.
1from 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
111const MS_PER_DAY = 86400000;
2
3// Add n months, clamping the day to the target month's last day
4// (31 January + 1 month = 28 February). Date.UTC on its own does not
5// clamp: it would roll that date forward into March.
6function addMonthsUTC(base, n) {
7 const total = base.getUTCMonth() + n;
8 const y = base.getUTCFullYear() + Math.floor(total / 12);
9 const m = ((total % 12) + 12) % 12;
10 const lastDay = new Date(Date.UTC(y, m + 1, 0)).getUTCDate();
11 return Date.UTC(y, m, Math.min(base.getUTCDate(), lastDay));
12}
13
14function calendarAge(birth, target) {
15 let months = (target.getUTCFullYear() - birth.getUTCFullYear()) * 12
16 + (target.getUTCMonth() - birth.getUTCMonth());
17 if (addMonthsUTC(birth, months) > target.getTime()) months -= 1;
18 const anchor = addMonthsUTC(birth, months);
19 return {
20 years: Math.floor(months / 12),
21 months: months % 12,
22 days: Math.floor((target.getTime() - anchor) / MS_PER_DAY),
23 };
24}
25
26const birth = new Date(Date.UTC(2000, 0, 1));
27const target = new Date(Date.UTC(2020, 0, 1));
28
29calendarAge(birth, target); // { years: 20, months: 0, days: 0 }
30Math.floor((target - birth) / MS_PER_DAY); // 7305
311' 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"
6Η Microsoft προειδοποιεί ότι το όρισμα "md" μπορεί να επιστρέψει αρνητικό αριθμό ή εσφαλμένο
αριθμό ημερών κοντά στα όρια των μηνών, επομένως το μέρος των υπολειπόμενων ημερών αυτού του τύπου δεν συμφωνεί
πάντα με τον παραπάνω κανόνα περιορισμού.
Συχνές ερωτήσεις
Πώς βρίσκω την ακριβή ηλικία μου; Εισαγάγετε μια ημερομηνία γέννησης και αφήστε την ημερομηνία-στόχο στη σημερινή ημερομηνία. Το αποτέλεσμα δίνει την ηλικία σε έτη, μήνες και ημέρες, καθώς και την ίδια ηλικία σε συνολικές ημέρες, εβδομάδες, ώρες και δευτερόλεπτα.
Γιατί δύο υπολογιστές ηλικίας δίνουν διαφορετικές απαντήσεις; Η διαφορά συνήθως οφείλεται στον τρόπο με τον οποίο μετρώνται οι υπόλοιπες ημέρες κοντά στο όριο ενός μήνα. Ένας υπολογιστής που περιορίζει την ημερομηνία στον συντομότερο μήνα στο τέλος του μήνα, όπως περιγράφηκε παραπάνω, μπορεί να διαφέρει κατά μία ή δύο ημέρες από έναν υπολογιστή που απλώς διαιρεί τον χρόνο που έχει παρέλθει με 30.
Λαμβάνει ο υπολογισμός υπόψη τα δίσεκτα έτη; Ναι. Ο συνολικός αριθμός ημερών περιλαμβάνει κάθε 29 Φεβρουαρίου που βρίσκεται μεταξύ των δύο ημερομηνιών. Σε ένα έτος χωρίς 29 Φεβρουάριο, η επέτειος γέννησης ενός ατόμου που γεννήθηκε σε δίσεκτη ημέρα υπολογίζεται ως 28 Φεβρουαρίου, δηλαδή ως η τελευταία ημέρα εκείνου του μήνα. Κάποιος που γεννήθηκε στις 29 Φεβρουαρίου 1996 είναι 26 ετών, 11 μηνών και 22 ημερών στις 20 Φεβρουαρίου 2023, και τα επόμενα γενέθλιά του πέφτουν 8 ημέρες αργότερα, στις 28 Φεβρουαρίου 2023.
Μπορεί να υπολογιστεί η ηλικία για μια ημερομηνία στο παρελθόν ή στο μέλλον; Ναι. Αν ορίσετε την ημερομηνία-στόχο σε μια μελλοντική ημερομηνία, εμφανίζεται πόσο χρονών θα είναι κάποιος εκείνη την ημέρα. Αν την ορίσετε σε μια παρελθοντική ημερομηνία, εμφανίζεται πόσο χρονών ήταν. Η ημερομηνία γέννησης δεν μπορεί να είναι στο μέλλον και η ημερομηνία-στόχος δεν μπορεί να είναι πριν από την ημερομηνία γέννησης.
Επηρεάζουν οι ζώνες ώρας το αποτέλεσμα; Όχι. Και οι δύο ημερομηνίες μετατρέπονται στα μεσάνυχτα UTC πριν από τον υπολογισμό των ημερών, επομένως το σύνολο παραμένει ίδιο ανεξάρτητα από την τοποθεσία του χρήστη ή τις αλλαγές λόγω θερινής ώρας.
Γιατί διαφέρει ο αριθμός των ημερών από τη διαίρεση των ημερών με 365,25; Το 365,25 είναι μόνο η μέση διάρκεια ενός έτους· δεν παρακολουθεί ποια συγκεκριμένα έτη του διαστήματος είναι δίσεκτα έτη 366 ημερών. Η καταμέτρηση των πλήρων ημερών μεταξύ δύο πραγματικών ημερολογιακών ημερομηνιών είναι ακριβής.
Πηγές
- Python
dateutil—relativedelta, ο κανόνας μήνα/ημέρας για την ηλικία ημερολογίου που περιγράφηκε παραπάνω. - Πλατφόρμα Java —
Period.betweenκαιChronoUnit.DAYS. - Microsoft Excel — συνάρτηση
DATEDIF. - MDN Web Docs —
Date. - Dershowitz, N. και Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.