Αριθμομηχανή Ηλικίας — Ακριβής Ηλικία σε Χρόνια, Μήνες & Ημέρες
Δωρεάν αριθμομηχανή ηλικίας: εισάγετε την ημερομηνία γέννησής σας για να λάβετε την ακριβή ηλικία σας σε χρόνια, μήνες και ημέρες, συν συνολικές εβδομάδες, ημέρες, ώρες και τα επόμενα γενέθλιά σας.
Αριθμομηχανή Ηλικίας
Γεννήθηκες σε ένα Monday
Επόμενα γενέθλια: 127 ημέρες μακριά (γίνεσαι 37)
Η ηλικία σας σε άλλες μονάδες
Πρόοδος ζωής
Η ηλικία σας σε σχέση με μια αποδεικτική περίοδο αναφοράς 80 ετών.
Τεκμηρίωση
Τι είναι ένας υπολογιστής ηλικίας;
Ένας υπολογιστής ηλικίας βρίσκει τον ακριβή χρόνο ανάμεσα σε δύο ημερομηνίες: μια ημερομηνία γέννησης και μια ημερομηνία-στόχο, συνήθως τη σημερινή. Εμφανίζει το αποτέλεσμα σε έτη, μήνες και ημέρες, και επίσης ως συνολικό άθροισμα σε εβδομάδες, ημέρες, ώρες, λεπτά και δευτερόλεπτα. Η ηλικία μπορεί να υπολογιστεί και για μια παρελθοντική ή μελλοντική ημερομηνία, οπότε δείχνει πόσο χρονών ήταν ή θα είναι ένα άτομο εκείνη την ημέρα.
Πώς υπολογίζεται η ηλικία
Η ηλικία είναι η διαφορά μεταξύ δύο ημερολογιακών ημερομηνιών. Υπάρχουν δύο σωστοί τρόποι περιγραφής αυτής της διαφοράς και καθένας είναι χρήσιμος για διαφορετικούς σκοπούς.
Ηλικία ημερολογίου (έτη, μήνες, ημέρες)
Αυτός είναι ο καθημερινός τρόπος με τον οποίο οι άνθρωποι δηλώνουν την ηλικία τους, όπως «33 ετών, 4 μηνών και 5 ημερών». Υπολογίζεται σε τρία βήματα:
- Μετρήστε τα πλήρη έτη που έχουν περάσει από την ημερομηνία γέννησης.
- Από τα πιο πρόσφατα γενέθλια, μετρήστε τους πλήρεις μήνες που έχουν περάσει.
- Από εκεί, μετρήστε τις υπόλοιπες ημέρες.
Το βήμα 3 γίνεται δύσκολο κοντά στο τέλος ενός μήνα, επειδή οι μήνες δεν έχουν όλοι τον ίδιο αριθμό ημερών. Κάποιος που γεννήθηκε στις 31 Ιανουαρίου και του οποίου η ηλικία μετριέται στις 1 Μαρτίου έχει ηλικία 1 μήνα και 1 ημέρα. Ένας μήνας μετά τις 31 Ιανουαρίου είναι οι 28 Φεβρουαρίου (ή οι 29 Φεβρουαρίου σε δίσεκτο έτος), αφού δεν υπάρχει 31 Φεβρουαρίου. Η ημερομηνία 1 Μαρτίου απέχει μία ημέρα από αυτήν. Αυτή η μέθοδος, που ονομάζεται μερικές φορές κανόνας relativedelta από τη βιβλιοθήκη Python που τη διέδωσε, περιορίζει την επέτειο στην τελευταία ημέρα του συντομότερου μήνα, ώστε ο αριθμός ημερών να μην γίνεται ποτέ αρνητικός.
Συνολικός χρόνος που έχει παρέλθει (ημέρες, ώρες, δευτερόλεπτα)
Για ακριβή καταμέτρηση του χρόνου ζωής, και οι δύο ημερομηνίες μετατρέπονται σε ένα μοναδικό χρονικό σημείο και υπολογίζεται η διαφορά σε πλήρεις ημέρες:
ημέρες = ακέραιο μέρος((ημερομηνία-στόχος − ημερομηνία γέννησης) ÷ 86.400.000 χιλιοστά του δευτερολέπτου)
Και οι δύο ημερομηνίες ορίζονται στα μεσάνυχτα UTC (Συντονισμένη Παγκόσμια Ώρα) πριν από την αφαίρεση. Έτσι αποτρέπεται η θερινή ώρα από το να προσθέσει ή να αφαιρέσει μία ώρα και να αλλοιώσει τον υπολογισμό των ημερών. Από το σύνολο των ημερών, οι εβδομάδες προκύπτουν διαιρώντας τις ημέρες με 7 και στρογγυλοποιώντας προς τα κάτω. Οι ώρες, τα λεπτά και τα δευτερόλεπτα προκύπτουν πολλαπλασιάζοντας τον αριθμό των ημερών με 24, 1.440 και 86.400.
Η διαίρεση του συνολικού αριθμού ημερών με 365 ή 365,25 δίνει μια κατά προσέγγιση ηλικία σε έτη, αλλά δεν λαμβάνει υπόψη ποια έτη του διαστήματος ήταν δίσεκτα. Η καταμέτρηση με βάση το ημερολόγιο, όπως περιγράφηκε παραπάνω, είναι ακριβής. Χρησιμοποιήστε την ηλικία ημερολογίου για να απαντήσετε στο «πόσο χρονών είμαι». Χρησιμοποιήστε το σύνολο των ημερών ή των εβδομάδων για εργασίες που απαιτούν ακριβή χρόνο που έχει παρέλθει, όπως τον καθορισμό των διαστημάτων λήψης φαρμάκων ή την αντίστροφη μέτρηση έως ένα ορόσημο.
Λυμένο παράδειγμα
Ένα άτομο που γεννήθηκε την 1 Ιανουαρίου 2000, με την ηλικία να μετριέται την 1 Ιανουαρίου 2020:
| Μέγεθος | Τιμή |
|---|---|
| Ηλικία ημερολογίου | 20 έτη, 0 μήνες, 0 ημέρες |
| Σύνολο ημερών | 7.305 |
| Σύνολο εβδομάδων | 1.043 |
| Ημέρα της εβδομάδας γέννησης | Σάββατο |
Το σύνολο των 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
111function addMonthsUTC(d, n) {
2 const total = d.getUTCMonth() + n;
3 const y = d.getUTCFullYear() + Math.floor(total / 12);
4 const m = ((total % 12) + 12) % 12;
5 const lastDay = new Date(Date.UTC(y, m + 1, 0)).getUTCDate();
6 return new Date(Date.UTC(y, m, Math.min(d.getUTCDate(), lastDay))); // clamp to month end
7}
8
9function calendarAge(birth, target) {
10 let months = (target.getUTCFullYear() - birth.getUTCFullYear()) * 12
11 + (target.getUTCMonth() - birth.getUTCMonth());
12 if (addMonthsUTC(birth, months) > target) months--;
13 const days = Math.floor((target - addMonthsUTC(birth, months)) / 86400000);
14 return { years: Math.floor(months / 12), months: months % 12, days };
15}
16
17const totalDays = Math.floor((target - birth) / 86400000); // 7305
181' 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" της DATEDIF. Μπορεί να επιστρέψει αρνητικό αριθμό, μηδέν ή ανακριβές αποτέλεσμα.
Συχνές ερωτήσεις
Πώς βρίσκω την ακριβή ηλικία μου; Εισαγάγετε μια ημερομηνία γέννησης και αφήστε την ημερομηνία-στόχο στη σημερινή ημερομηνία. Το αποτέλεσμα δίνει την ηλικία σε έτη, μήνες και ημέρες, καθώς και την ίδια ηλικία σε συνολικές ημέρες, εβδομάδες, ώρες και δευτερόλεπτα.
Γιατί δύο υπολογιστές ηλικίας δίνουν διαφορετικές απαντήσεις; Η διαφορά συνήθως οφείλεται στον τρόπο με τον οποίο μετρώνται οι υπόλοιπες ημέρες κοντά στο όριο ενός μήνα. Ένας υπολογιστής που περιορίζει την ημερομηνία στον συντομότερο μήνα στο τέλος του μήνα, όπως περιγράφηκε παραπάνω, μπορεί να διαφέρει κατά μία ή δύο ημέρες από έναν υπολογιστή που απλώς διαιρεί τον χρόνο που έχει παρέλθει με 30.
Λαμβάνει υπόψη ο υπολογισμός τα δίσεκτα έτη; Ναι. Ο συνολικός αριθμός ημερών περιλαμβάνει κάθε ημερομηνία 29 Φεβρουαρίου που βρίσκεται ανάμεσα στις δύο ημερομηνίες, και μια ημερομηνία γέννησης 29 Φεβρουαρίου μετριέται ως προς την ημερομηνία 28 Φεβρουαρίου στα έτη που δεν είναι δίσεκτα.
Μπορεί να υπολογιστεί η ηλικία για μια ημερομηνία στο παρελθόν ή στο μέλλον; Ναι. Αν η ημερομηνία-στόχος οριστεί σε μελλοντική ημερομηνία, φαίνεται πόσο χρονών θα είναι κάποιος εκείνη την ημέρα. Αν οριστεί σε παρελθοντική ημερομηνία, φαίνεται πόσο χρονών ήταν.
Επηρεάζουν οι ζώνες ώρας το αποτέλεσμα; Όχι. Και οι δύο ημερομηνίες μετατρέπονται στα μεσάνυχτα UTC πριν από τον υπολογισμό των ημερών, επομένως το σύνολο παραμένει ίδιο ανεξάρτητα από την τοποθεσία του χρήστη ή τις αλλαγές λόγω θερινής ώρας.
Γιατί διαφέρει ο αριθμός των ημερών από τη διαίρεση των ημερών με 365,25; Το 365,25 είναι μόνο η μέση διάρκεια ενός έτους· δεν παρακολουθεί ποια συγκεκριμένα έτη του διαστήματος είναι δίσεκτα έτη 366 ημερών. Η καταμέτρηση των πλήρων ημερών μεταξύ δύο πραγματικών ημερολογιακών ημερομηνιών είναι ακριβής.
Παραπομπές
- dateutil project. relativedelta. Τεκμηρίωση relativedelta της dateutil — όταν ένας μήνας που προστίθεται ξεπερνά το τέλος ενός συντομότερου μήνα, χρησιμοποιείται η τελευταία ημέρα εκείνου του μήνα.
- MDN Web Docs (Mozilla). Date. Αναφορά MDN για το Date — μια ημερομηνία JavaScript είναι ένας αριθμός χιλιοστών του δευτερολέπτου από τις 1 Ιανουαρίου 1970 UTC· τα ±8,64 × 10¹⁵ ms ισούνται με ±100.000.000 ημέρες, άρα μία ημέρα είναι 86.400.000 ms.
- U.S. Naval Observatory. Leap Years. Συχνές ερωτήσεις του USNO για τα δίσεκτα έτη — τα έτη που διαιρούνται με το 4 είναι δίσεκτα, εκτός από τα έτη αιώνα που δεν διαιρούνται με το 400· το 2000 είναι δίσεκτο έτος.
- Microsoft. DATEDIF function. Υποστήριξη Microsoft: DATEDIF — οι μονάδες "Y", "YM" και "MD" και οι γνωστοί περιορισμοί της "MD".