מחשבון גיל — גיל מדויק בשנים, חודשים וימים
מחשבון גיל חינמי: הזן את תאריך לידתך כדי לקבל את גילך המדויק בשנים, חודשים וימים, בנוסף לסך הכל שבועות, ימים, שעות ויום הולדתך הבא.
מחשבון גיל
נולדת ביום Monday
יום הולדת הבא: 144 ימים הרחק (חוגגת 37)
הגילך ביחידות אחרות
התקדמות חיים
הגילך מול טווח ייחוס של 80 שנה להמחשה.
תיעוד
מה המחשבון הזה עושה
הקלד את תאריך הלידה שלך והוא יגיד לך בדיוק כמה שנים אתה - בשנים, חודשים וימים - בדיוק כמו שהיית אומר זאת בקול רם ("אני בן 33 שנים, 4 חודשים ו-5 ימים"). הוא גם מציג את אותו גיל מחולק לחודשים, שבועות, ימים, שעות, דקות ושניות, היום בשבוע שבו נולדת, וכמה זמן עד ליום ההולדת הבא שלך.
השאר את השדה השני בתאריך הנוכחי כדי לקבל את הגיל הנוכחי שלך, או שנה אותו לתאריך כלשהו בעבר או בעתיד כדי למצוא את גילך בתאריך זה.
הכלל האחד שמוציא את הגיל מהקצה: חודשים ושנים אינם מספר קבוע של ימים. בפברואר יש 28 או 29; חודשים אחרים יש 30 או 31. אז "חודש אחד" פירושו "אותו מספר יום, חודש מאוחר יותר" - לא "30 ימים." מחשבון זה עוקב אחר הכלל הקלנדרי, וזו הסיבה שהוא יכול להיות שונה ביום או יומיים מכלים שפשוט מחלקים ב-30 או 365.
כיצד הגיל שלך מחושב
הגיל הוא הפער בין שני תאריכים. יש שתי דרכים כנות למדוד את הפער הזה, ותוכל זה מציג את שתיהן.
1. גיל קלנדרי (שנים, חודשים, ימים). ספור שנים שלמות מיום ההולדת שלך, ואז חודשים שלמים, ואז את הימים הנותרים:
- ספור שנים מלאות מהלידה.
- מיום ההולדת האחרון, ספור חודשים מלאים.
- משם, ספור את הימים הנותרים.
החלק העדין הוא שלב 3 ליד גבולות החודש. מישהו שנולד ב-31 בינואר, שנמדד ב-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.