منو سایت

  • خانه
  • وبلاگ
  • جاوا اسکریپت نحوه محاسبه سن از تاریخ تولد

جاوا اسکریپت نحوه محاسبه سن از تاریخ تولد

 تاریخ انتشار :
/
  وبلاگ
جاوا اسکریپت نحوه محاسبه سن از تاریخ تولد

برای محاسبه سن از تاریخ تولد در جاوا اسکریپت، می توانید از این تابع استفاده کنید:

function age(birthdate) {
  const today = new Date();
  const age = today.getFullYear() - birthdate.getFullYear() - 
             (today.getMonth() < birthdate.getMonth() || 
             (today.getMonth() === birthdate.getMonth() && today.getDate() < birthdate.getDate()));
  return age;
}

در اینجا نمونه ای از استفاده از این تابع (در 10 فوریه 2023 فراخوانی شده است):

const birthdate = new Date(2000, 2, 5); 
const ageValue = age(birthdate);
console.log(ageValue);

خروجی:

22

امیدوارم این پاسخ سریع کمک کند.

اگر در درک نحوه کارکرد این کد و چه استثنایی در محاسبه سن (سالهای کبیسه) مشکل دارید، لطفاً ادامه مطلب را بخوانید.

مشکلات سال های کبیسه

برای محاسبه سن افراد، باید این واقعیت را در نظر بگیرید که طول یک سال کمی متفاوت از یک سال تقویمی است.

یک سال تقریبا است 365.25 روزدر حالی که یک سال تقویمی 365 روز است.

برای جبران این تفاوت، هر سال چهارم (به استثنای سال هایی که بر 100 بخش پذیر نیست اما بر 400 تقسیم نمی شود) در نظر گرفته می شود. سال کبیسه.

این اختلاف هنگام تلاش برای محاسبه سن افراد بر اساس تعداد روزهای از تاریخ تولد، مشکلاتی را ایجاد می کند.

به عنوان مثال، متولد 1 ژانویه 2000، 18 ساله می شود 6575 روز بعد در 1 ژانویه 2018 با 5 سال کبیسه بین بازه زمانی.

با این حال، متولد 1 ژانویه 2001 تنها 18 سال سن خواهد داشت 6574 چند روز بعد در 1 ژانویه 2019، با تنها 4 سال کبیسه در بین.

تمام تلاش من این است که بگویم اگر فردی 6574 روزه است، به دلیل سال های کبیسه نمی توانید تشخیص دهید که 17 ساله است یا 18 ساله بدون اینکه اطلاعات بیشتری در مورد تاریخ تولد او داشته باشید.

برای محاسبه سن افراد در جاوا اسکریپت از Date اعتراض کنید و این دو مرحله را دنبال کنید:

  1. سال تولد را با استفاده از سال جاری کم کنید getFullYear روش.
  2. اگر ماه و روز فعلی قبل از ماه و روز تولد باشد، 1 را کم کنید getMonth و getDate مواد و روش ها.

بیایید نگاهی دیگر به کدی که قبلاً در مقدمه مشاهده کردید، با چند نظر و بازنویسی برای شفاف‌تر شدن آن بیاندازیم.

// Get today's date object
const today = new Date();

function age(birthdate) {
  // A bool that represents if today's day/month precedes the birth day/month
  const one_or_zero = (today.getMonth() < birthdate.getMonth()) ||
                      (today.getMonth() === birthdate.getMonth() &&
                       today.getDate() < birthdate.getDate());
  
  // Calculate the difference in years from the date object's components
  let year_difference = today.getFullYear() - birthdate.getFullYear();
  
  // The difference in years is not enough. 
  // To get it right, subtract 1 or 0 based on if today precedes the 
  // birthdate's month/day.
  // To do this, subtract the 'one_or_zero' boolean from 'year_difference'
  // (This converts true to 1 and false to 0 under the hood.)
  const age = year_difference - one_or_zero;
  
  return age;
}

// Example age check:
console.log(age(new Date(2000, 0, 1)));

خروجی:

23

توجه داشته باشید که در جاوا اسکریپت ماه های a Date شی‌ها بر پایه 0 هستند (یعنی ژانویه 0 است، فوریه 1، و غیره)، در حالی که در پایتون آنها 1 هستند (یعنی ژانویه 1 است، فوریه 2 و غیره است).

Leaplings چطور؟

کبیسه کسی است که در یک روز کبیسه سال کبیسه (29 فوریه) به دنیا آمده باشد.

این باعث ایجاد مشکلاتی در هنگام محاسبه سن می شود، زیرا در یک سال سنتی این تاریخ تولد وجود ندارد. جامپرها معمولاً تولد “رسمی” خود را در 28 فوریه یا 1 مارس دارند.

اما از نظر فنی اول مارس روز صحیحی است زیرا یک سال کامل از روز کبیسه گذشته است.

اجازه دهید به شما نشان دهم که منطق تابع فوق چگونه با این مورد برخورد می کند که فردی در 29 فوریه 2000 متولد شده است و ما می خواهیم سن آنها را در 28 فوریه 2001 محاسبه کنیم.

let birthdate = new Date(2000, 1, 29); // 29th Feb 2000
let today = new Date(2001, 1, 28);     // 28th Feb 2001

let year_difference = today.getFullYear() - birthdate.getFullYear();  // 2001 - 2000 = 1

let one_or_zero = (today.getMonth() < birthdate.getMonth()) ||
                  (today.getMonth() === birthdate.getMonth() && today.getDate() < birthdate.getDate()) ? 1 : 0;

let age = year_difference - one_or_zero;

console.log(age);  // Output: 0

از آنجایی که 28 فوریه 2001 قبل از تاریخ تولد فرد در 29 فوریه 2000 است، ارزش one_or_zero است 1. این بدان معنی است که سن آنها به عنوان محاسبه خواهد شد year_difference - 1که هست 1 - 1 = 0.

بنابراین منطق به درستی مشخص می کند که هیچ سالی از 29 فوریه 2000 تا 28 فوریه 2001 نگذشته است.

جمعش کن

در این آموزش، نحوه محاسبه سن در جاوا اسکریپت با استفاده از درون خط را یاد گرفتید Date هدف – شی.

محاسبه سن شما ممکن است آسان به نظر برسد، اما زمانی که این واقعیت را در نظر بگیرید که یک سال دقیقاً 365 روز نیست، پیچیده تر می شود. در عوض، تقریباً 365.25 روز است.

امیدوارم این آموزش برای شما مفید و لذت بخش بوده باشد.

کد نویسی مبارک!

درباره نویسنده

جاوا اسکریپت نحوه محاسبه سن از تاریخ تولد
آرتوری جلی
من یک کارآفرین و وبلاگ نویس از فنلاند هستم. هدف من این است که با راهنمایی‌ها و بررسی‌های جامع، کدنویسی و فناوری را برای شما آسان‌تر کنم.