نحوه مقایسه دو تاریخ در جاوا اسکریپت – تکنیک ها، روش ها و بهترین روش ها
در جاوا اسکریپت، می توانید از شی date برای کار موثر با تاریخ ها، زمان ها و مناطق زمانی در یک برنامه استفاده کنید.
اشیاء تاریخ به شما کمک می کنند تا به طور کارآمد داده ها را دستکاری کنید، وظایف مختلف مربوط به تاریخ را انجام دهید، و هنگام ایجاد برنامه های کاربردی واقعی، محاسباتی را انجام دهید.
در این مقاله با موضوعات زیر آشنا می شویم:
اهمیت مقایسه تاریخ در جاوا اسکریپت
نحوه مقایسه تاریخ ها با اپراتورهای مقایسه
نحوه مقایسه تاریخ ها با متد getTime()
نحوه استفاده از روش valueOf()
نحوه استفاده از روش toISOString()
چالش های مقایسه تاریخ ها در جاوا اسکریپت
تحلیل اجمالی مقایسه تاریخ
در جاوا اسکریپت، مقایسه تاریخ شامل ارزیابی دو تاریخ برای تعیین اینکه آیا یک تاریخ زودتر، دیرتر یا مشابه دیگری است، می باشد.
روشهای مختلفی برای مقایسه تاریخها وجود دارد که شامل (اما نه محدود به) عملگرهای مقایسه ( <
، >
، <=
، >=
) و روشهایی مانند getTime()
و valueOf()
است.
اهمیت مقایسه تاریخ در جاوا اسکریپت
مقایسه تاریخ در جاوا اسکریپت برای پردازش و سازماندهی داده های مربوط به زمان و عملکردهای حساس به زمان در برنامه های کاربردی وب مهم است. در برنامههای کاربردی برای مقابله با فیلتر کردن دادهها، زمانبندی و مدیریت رویدادها بر اساس زمان بسیار مهم است.
در جاوا اسکریپت، درک تکنیکهای مقایسه تاریخ به شما امکان میدهد تا برنامههای قوی و یکپارچه بسازید که میتوانند سناریوهای مختلف مرتبط با زمان را تحمل کنند.
برای شروع، در اینجا دلایلی وجود دارد که مقایسه تاریخ یک مفهوم کلیدی در جاوا اسکریپت است:
فیلتر کردن داده ها : مقایسه تاریخ در برنامه هایی که داده های حساس به زمان مانند سوابق تراکنش ها و گزارش ها، فیلتر کردن و بازیابی اطلاعات بخش جدایی ناپذیر برنامه هستند، بسیار مهم است.
زمانبندی رویداد : تعیین وضعیت یک رویداد با مقایسه تاریخ آسان است. در سازماندهی رویدادها، یادآوری ها و وظایف کمک می کند.
حساب : در جاوا اسکریپت، مقایسه تاریخ، محاسبات ساده را تسهیل می کند، مانند جمع و تفریق فواصل زمانی، انجام دستکاری تاریخ، و محاسبه مدت زمان بین دو تاریخ.
منطق شرطی : با مقایسه تاریخ، میتوانید از منطق شرطی مبتنی بر شرایط مربوط به زمان استفاده کنید تا در صورت نزدیک شدن به رویداد خاصی، اقدامی را آغاز کنید.
تجربه کاربر : مقایسه تاریخ با اطمینان از اینکه عملکردهای مربوط به زمان به خوبی کار می کنند، قابلیت اطمینان یک برنامه را افزایش می دهد.
اشیاء تاریخ در جاوا اسکریپت
در جاوا اسکریپت، اشیاء تاریخ یک مفهوم بسیار مهم برای دانستن هستند. شما از آنها برای کار با زمان ها و تاریخ ها استفاده می کنید و راه هایی برای دستکاری، قالب بندی و نمایش تاریخ ها و زمان ها در قالب های متعدد ارائه می دهید.
نحوه ایجاد یک شیء تاریخ
چندین روش برای ایجاد یک شی تاریخ در جاوا اسکریپت وجود دارد. برخی از راه ها به شرح زیر است:
استفاده از کلمه کلیدی new
let currentDate = new Date(); console.log(currentDate) //OUTPUT.. Tue Feb 06 2024 00:28:59 GMT-0800 (Pacific Standard Time)
در کد بالا، سازنده Date بدون پاس کردن هیچ پارامتری فراخوانی شد. این بدان معنی است که یک شی تاریخ را با تاریخ و زمان فعلی به عنوان مقادیر برمی گرداند.
استفاده از Date
( dateString
)
let current = new Date("February 6, 2025 10:25:00"); console.log(current); // OUTPUT .. Thu Feb 06 2025 10:25:00 GMT-0800 (Pacific Standard Time)
در کد بالا، سازنده Date
با عبور یک تاریخ خاص و زمان به عنوان پارامتر برای ایجاد یک شی تاریخ سفارشی فراخوانی شد. نکته کلیدی که در اینجا باید به آن توجه داشت این است که پارامترها در قالب رشته هستند.
با استفاده از سال، ماه، روز، ساعت، دقیقه، ثانیه و میلی ثانیه
let current = new Date(2024, 1, 6, 12, 0, 0, 0); console.log(current); // OUTPUT... Tue Feb 06 2024 12:00:00 GMT-0800 (Pacific Standard Time)
در کد بالا یک سازنده Date
با سال، ماه، روز، ساعت، دقیقه، ثانیه و میلی ثانیه فراخوانی شد تا یک شی سفارشی با زمان و تاریخ مشخص ایجاد کند.
تاریخ ها با مهر زمانی
const timestamp = new Date(14852959902) console.log(timestamp) // OUTPUT ... Sun Jun 21 1970 14:49:19 GMT-0700 (Pacific Daylight Time)
اگرچه ایجاد تاریخ با مهر زمانی کمترین محبوبیت را دارد، اما همچنان یکی از روشهای ایجاد تاریخ است.
مهر زمانی کل میلی ثانیه هایی است که از 1 ژانویه 1970 سپری شده است.
مبانی مقایسه تاریخ
در جاوا اسکریپت، می توانید تاریخ ها را با استفاده از روش های مختلف مقایسه کنید، مانند عملگرهای مقایسه و روش های Date
داخلی.
نحوه مقایسه تاریخ ها با اپراتورهای مقایسه
در جاوا اسکریپت می توانید از عملگرهای مقایسه مانند <
, >
, <=
, >=
و !=
برای مقایسه تاریخ ها استفاده کنید. جاوا اسکریپت به صورت داخلی تاریخ ها (میلی ثانیه از 1 ژانویه 1970) را به مهرهای زمانی مربوطه خود تبدیل می کند.
کد زیر مقایسه تاریخ را با استفاده از عملگرهای مقایسه نشان می دهد:
// Create a two date objects const firstDate = new Date('2024-01-07') const secondDate = new Date('2023-11-09') // Look for comparison among the trio using the comparison operators console.log(firstDate < secondDate) // false (firstDate is later than secondDate) console.log(firstDate > secondDate) // true (firstDate is earlier than secondDate) console.log(firstDate >= secondDate) // false (firstDate is earlier than or equal to secondDate) console.log(firstDate <= secondDate) // true (firstDate is later than or equal to secondDate) console.log(firstDate == secondDate) // false (firstDate is not equal to secondDate) console.log(firstDate != secondDate) // true (firstDate is not to equal secondDate)
خروجی کد نشان می دهد که firstDate
دیرتر از secondDate
در مقایسه اول است. در زمینه تاریخ، بین دو تاریخ، later
تاریخی است که پس از دیگری در زمان رخ می دهد.
مقایسه دوم نشان می دهد که firstDate
زودتر از secondDate
است. در زمینه تاریخ، بین دو تاریخ، earlier
به تاریخی اطلاق می شود که در زمان اول می شود.
خروجی مقایسه سوم نشان می دهد که firstDate
زودتر یا مساوی با secondDate
است.
خروجی کد برای مقایسه سوم نشان می دهد که firstDate
دیرتر یا برابر با secondDate
است.
مقایسه پنجم نشان می دهد که firstDate
با secondDate
برابر نیست.
بیشتر بخوانید
Google وصلههای روز صفر که توسط فروشنده نرمافزار جاسوسی تجاری مورد سوء استفاده قرار میگیرد
و آخرین مقایسه نشان داد که firstDate
برابر با secondDate
نیست.
توجه به این نکته مهم است که عملگرهای مقایسه در جاوا اسکریپت بر اساس زمان هماهنگ جهانی (UTC) هستند.
اگر میخواهید تاریخها را بر اساس مقادیر واقعی تاریخ و زمان آنها (شامل سال، ماه، روز، ساعت، دقیقه، ثانیه و میلیثانیه) مقایسه کنید، ممکن است لازم باشد این مؤلفهها را استخراج کرده و به صورت جداگانه مقایسه کنید.
کد زیر نحوه مقایسه دو تاریخ را بر اساس اجزای مربوطه نشان می دهد.
const firstDate = new Date('2024-02-05'); const secondDate = new Date('2024-02-05'); // Extract year, month, and day components of both dates const firstYear = firstDate.getFullYear(); const firstMonth = firstDate.getMonth(); const firstDay = firstDate.getDate(); const secondYear = secondDate.getFullYear(); const secondMonth = secondDate.getMonth(); const secondDay = secondDate.getDate(); // Compare both date components let result; switch (true) { case firstYear === secondYear && firstMonth === secondMonth && firstDay === secondDay: result = "The dates are equal."; break; case firstYear < secondYear || (firstYear === secondYear && firstMonth < secondMonth) || (firstYear === secondYear && firstMonth === secondMonth && firstDay < secondDay): result = "firstDate is earlier than secondDate."; break; default: result = "firstdate is later than secondDate."; } console.log(result);
تفکیک کد بالا به شرح زیر است:
ایجاد اشیاء تاریخ: دو شیء firstDate
و secondDate
که با همان تاریخ مقدار دهی اولیه شده اند ایجاد شد.
با متدهای getFullYear()
، getMonth()
و getDate()
، کد اجزای سال ، ماه و روز را از هر تاریخ استخراج می کند.
مقایسه بین اجزای تاریخ با استفاده از عبارت switch case. کد بر اساس مقدار boolean
true
، با هر مورد تحلیل شرایط مختلف برای اطمینان از ارتباط بین دو تاریخ ارزیابی شد.
نتیجه وارد کنسول می شود.
به طور خلاصه، برای تعیین اینکه آیا دو شیء تاریخ بر اساس مقادیر آنها مانند سال، ماه و روز برابر هستند یا خیر، کد آنها را با استفاده از یک عبارت switch case مقایسه می کند تا سناریوهای مقایسه چندگانه را مدیریت کند.
نحوه مقایسه تاریخ ها با متد getTime()
متد getTime()
برای مقایسه تاریخ ها با میلی ثانیه مفید است. مهم است که به خاطر داشته باشید که getTime()
یک مقایسه عددی بین تاریخ ها انجام می دهد و مقدار زمان را از 1 ژانویه 1970 برمی گرداند.
// Create two Date objects const firstDate = new Date('2025-01-01'); const secondDate = new Date('2024-01-02'); // Get the time in milliseconds for each date const firstTime = firstDate.getTime(); const secondTime = secondDate.getTime(); // Compare the time values if (firstTime < secondTime) { console.log('firstDate is earlier than secondDate'); } else if (firstTime > secondTime) { console.log('firstDate is later than secondDate'); } else { console.log('firstDate are secondDate'); } //OUTPUT....firstDate is later than secondDate
در کد بالا:
دو شیء تاریخ عبارتند از firstDate
و secondDate
که هر دو نشان دهنده تاریخ های متفاوتی هستند.
از متد getTime()
برای بدست آوردن زمان هر دو عنصر بر حسب میلی ثانیه استفاده شد.
عملگرهای مقایسه استاندارد ( <
, >
, ===
) برای تعیین رابطه آنها استفاده شد.
خروجی کد بالا firstDate
دیرتر از secondDate
است، زیرا secondDate
قبل از firstDate
می آید.
نحوه استفاده از روش valueOf()
در جاوا اسکریپت، متد valueOf()
به طور خودکار در پشت صحنه فراخوانی می شود تا مقدار اولیه شی مشخص شده را برگرداند.
const word = new String("Hello!"); console.log(word); // Output: [String: 'Hello!'] console.log(str.valueOf()); // Output: 'Hello!' var number = new Number(10); console.log(number); // Output: [Number: 10] console.log(num.valueOf()); // Output: 10
در مثال بالا، متد valueOf()
از هر دو شی رشته و عدد، رشته و مقادیر عددی را که نشان می دهد برمی گرداند.
با این حال، متد valueOf()
یک مهر زمانی (میلی ثانیه از زمان Unix Epoch) برمی گرداند که مقایسه تاریخ ها را آسان تر می کند.
const date = new Date(); const date1 = new Date(); if (date.valueOf() < date1.valueOf()) { console.log('date is earlier than date1') } else if (date.valueOf() > date1.valueOf()) { console.log('date is later than date1') } else { console.log('date and date1 are same') } // OUTPUT ... date and date1 are same
خروجی نشان می دهد که هر دو شیء تاریخ یکسان هستند.
نحوه استفاده از روش toISOString()
در جاوا اسکریپت، متد toISOString()
برای تبدیل یک شیء Date
به نمایش رشته ای به فرمت توسعه یافته ISO 8601 ساده شده است که همیشه 24 تا 27 کاراکتر طول دارد. نویسهها به ترتیب YYYY-MM-DDTHH:mm:ss.sssZ
یا ±YYYYYY-MM-DDTHH:mm:ss.sssZ
هستند.
این روش زمانی که از آن برای دستکاری یا مقایسه تاریخ ها استفاده می کنید، یک روش استاندارد برای نمایش تاریخ ها به عنوان رشته ها ارائه می دهد. تبدیل دو تاریخ به رشته های ISO از طریق toISOString()
مفید است، زیرا با اطمینان از اینکه هر دو تاریخ در قالب یکسان هستند، مقایسه را بدون مشکل می کند.
برای مقایسه رشته های ISO می توانید از عملگرهای استاندارد مقایسه رشته ها مانند ===
, <
, >
استفاده کنید.
// Create two Date objects const firstDate = new Date('2024-02-06T12:00:00'); const secondDate = new Date('2024-02-07T12:00:00'); // Convert the dates to ISO strings const firstISODate = firstDate.toISOString(); const secondISODate = secondDate.toISOString(); // Compare the two ISO strings if (firstISODate === secondISODate) { console.log("The dates are equal."); } else if (firstISODate < secondISODate) { console.log("firstDate is before secondDate."); } else { console.log("firstDate is after secondDate."); } // OUTPUT ....firstDate is before secondDate.
کد بالا نشان می دهد که تاریخ ها به رشته های ISO تبدیل شده اند و مستقیماً هر دو رشته را برای تعیین وضعیت نسبی آنها مقایسه می کند. سهولت مقایسه و سازگاری را تضمین می کند.
چالش های مقایسه تاریخ ها در جاوا اسکریپت
آگاهی از مسائل احتمالی و راهحلهای آنها میتواند به شما کمک کند هنگام مقایسه تاریخها در جاوا اسکریپت از دقت و سازگاری اطمینان حاصل کنید.
برخی از مشکلات شناخته شده در زیر ذکر شده است:
اپراتورهای مقایسه
هنگام استفاده از عملگرهای مقایسه، مقادیر عددی getTime()
باید تنها معیارهای مقایسه باشند. این روش ذاتاً تبدیلهای منطقه زمانی را مدیریت نمیکند، به این معنی که قبل از استفاده از getTime()
باید اطمینان حاصل کنید که زمان به یک منطقه زمانی معمولی عادی میشود.
در جاوا اسکریپت، شی date
به شما امکان می دهد تاریخ های نامعتبر ایجاد کنید (مانند 30 فوریه). شما باید از getTime()
برای جلوگیری از رفتار غیرمنتظره پس از اعتبارسنجی تاریخ ها استفاده کنید.
نحوه رسیدگی به موضوع:
اعتبارسنجی تاریخها : اعتبارسنجی تاریخها باید اولین قدم برای اطمینان از معتبر بودن تاریخ قبل از انجام هر مقایسه باشد.
Normalize Timezones : قبل از استفاده از متد getTime()
، باید مطمئن شوید که تاریخ ها به یک منطقه زمانی معمولی عادی شده اند.
نیازهای دقیق : تأیید کنید که آیا getUTCFullYear()
، getUTCMonth()
و getUTCDate()
برای نیاز مقایسه شما ضروری است. اگر نه، از متد getTime()
استفاده کنید.
const firstDate = new Date('2024-02-01'); const secondDate = new Date('2024-02-03'); if (firstDate.getTime() < secondDate.getTime()) { // firstDate is earlier than secondDATE }
تفاوت منطقه زمانی
مطمئن شوید که تاریخ ها را در همان منطقه زمانی یا با UTC مقایسه می کنید و نه منطقه زمانی محلی کاربر. استفاده از مناطق زمانی محلی میتواند هنگام مقایسه تاریخها در مناطق زمانی مختلف یا هنگام کار با تاریخهای منابع مختلف منجر به اختلاف شود.
در مناطق زمانی خاص، حالت تابستانی ممکن است قالب زمانی پذیرفته شده باشد. در این مورد، زمان محلی ممکن است به جلو یا عقب تنظیم شود. این تنظیم می تواند مدت زمان بین دو تاریخ را تحت تاثیر قرار دهد و باعث نتایج غیرمنتظره شود.
نحوه رسیدگی به موضوع:
عادی سازی منطقه زمانی: همه تاریخ ها را قبل از مقایسه به یک منطقه زمانی استاندارد، یعنی UTC (زمان جهانی هماهنگ) تبدیل کنید. این یکپارچگی در سراسر صفحه را تضمین می کند.
ارتباطات: هنگام کار با تاریخ های به دست آمده از منابع متعدد، اطمینان حاصل کنید که اطلاعات منطقه زمانی برقرار و استاندارد شده است. این امر به اطمینان از تفسیر مداوم تاریخ ها کمک می کند.
const firstDate = new Date('2024-02-02T12:00:00Z'); // UTC Date const secondDate = new Date(); // Current local date // Compare dates in UTC to avoid timezone issues if (firstDate.toISOString() === secondDate.toISOString()) { // Dates are equal }
دقت، درستی
در جاوا اسکریپت، زمان از زمان یونیکس (1 ژانویه 1970) بر حسب میلی ثانیه نشان داده می شود. این هنگام مقایسه تاریخی که دارای زمان مرتبط است بسیار مهم است، زیرا ممکن است با مشکلاتی با دقت روبرو شوید.
نحوه رسیدگی به موضوع:
کنترل کیفیت : بازرسیها، آزمایشها و اعتبارسنجی سیستمها و روشهای اندازهگیری میتواند به تصحیح خطاها در فرآیند اندازهگیری کمک کند.
کالیبراسیون : کالیبراسیون منظم ابزار و تجهیزات به حفظ دقت و دقت در اندازه گیری ها کمک می کند. کالیبراسیون شامل مقایسه اندازه گیری های انجام شده توسط یک دستگاه با استانداردهای شناخته شده برای اطمینان از دقت و قابلیت اطمینان است.
const firstDate = new Date('2023-02-06'); const secondDate = new Date('2022-02-06'); // This might not always be true due to time information if (firstDate === secondDate) { // Dates are not necessarily equal }
بسته بندی
در این آموزش، در مورد مقایسه تاریخ و اینکه چرا مهم است بدانید که چگونه آن را در جاوا اسکریپت انجام دهید، آشنا شدید. در مورد اشیاء تاریخ و نحوه ایجاد آن و همچنین اصول مقایسه تاریخ و روش مقایسه تاریخ صحبت کردیم.
ما همچنین به برخی از مشکلاتی که احتمالاً هنگام مقایسه تاریخها در جاوا اسکریپت با آنها مواجه میشویم، نگاه کردیم.
خواندن مبارک!
ارسال نظر