جاوااسکریپت نوع دادهی مجزایی به نام تاریخ (Date) ندارد. با این حال، شما میتوانید از شیء Date و متدهای آن برای کار با تاریخ و زمان در برنامههای خود استفاده کنید. شیء Date تعداد زیادی متد برای تنظیم، دریافت و دستکاری تاریخ دارد، اما هیچ ویژگی یا پراپرتی (Property) خاصی ندارد.
جاوااسکریپت با تاریخها مشابه زبان جاوا رفتار میکند؛ این دو زبان متدهای تاریخ مشترک زیادی دارند و هر دو، تاریخ را به صورت تعداد میلیثانیههای سپریشده از نیمهشب آغاز ۱ ژانویه ۱۹۷۰ به وقت UTC ذخیره میکنند. همچنین برچسب زمانی یونیکس (Unix Timestamp)، نشاندهندهی تعداد ثانیههای سپریشده از همین لحظه است. به این نقطه زمانی مبدأ (نیمهشب ۱ ژانویه ۱۹۷۰)، اصطلاحاً Epoch گفته میشود.
محدوده زمانی شیء Date از ۱۰۰,۰۰۰,۰۰۰ روز قبل تا ۱۰۰,۰۰۰,۰۰۰ روز بعد نسبت به مبدأ زمان (Epoch) است.
برای ساخت یک شیء Date از ساختار زیر استفاده میشود:
const dateObjectName = new Date([parameters]);
در این ساختار، dateObjectName نام شیء تاریخ در حال ساخت است که میتواند یک متغیر جدید یا ویژگی یک شیء موجود باشد.
نکته: اگر
Date()را بدون کلمه کلیدیnewصدا بزنید، یک رشته (String) حاوی تاریخ و زمان فعلی را برمیگرداند.
پارامترها در ساختار بالا میتوانند یکی از موارد زیر باشند:
بدون پارامتر (خالی): تاریخ و زمان همین لحظه را میسازد. مانند: ;()const today = new Date.
یک رشته متنی نشاندهنده تاریخ: شکلهای مختلفی دارد که پشتیبانی از آنها به موتور مرورگر بستگی دارد، اما فرمت استاندارد YYYY-MM-DDTHH:mm:ss.sssZ همیشه و همهجا پشتیبانی میشود. مانند: ("xmas95 = new Date("1995-12-25. اگر بخشهای ساعت، دقیقه یا ثانیه را وارد نکنید، مقدار آنها به طور خودکار صفر تنظیم میشود.
مجموعهای از اعداد صحیح برای سال، ماه و روز: مانند: xmas95 = new Date(1995, 11, 25).
مجموعهای از اعداد صحیح برای سال، ماه، روز، ساعت، دقیقه و ثانیه: مانند: xmas95 = new Date(1995, 11, 25, 9, 30, 0).
Dateمتدهای شیء Date برای مدیریت تاریخ و زمان به چند دسته کلی تقسیم میشوند:
متدهای "set" برای تنظیم مقادیر تاریخ و زمان در اشیاء تاریخ.
متدهای "get" برای دریافت مقادیر تاریخ و زمان از اشیاء تاریخ.
متدهای "to" برای برگرداندن مقادیر رشتهای از اشیاء تاریخ.
متدهای parse و UTC برای آنالیز و تحلیل رشتههای تاریخ.
با استفاده از متدهای get و set میتوانید مقادیر ثانیه، دقیقه، ساعت، روزِ ماه، روزِ هفته، ماه و سال را به صورت جداگانه دریافت کرده یا تنظیم کنید. متدی به نام getDay وجود دارد که روز هفته را برمیگرداند، اما متد متناظری به نام setDay وجود ندارد؛ زیرا روزِ هفته بر اساس تاریخ داده شده، به طور خودکار محاسبه و تنظیم میشود.
این متدها از اعداد صحیح برای نمایش مقادیر زمان به شرح زیر استفاده میکنند:
ثانیه و دقیقه: از 0 تا 59
ساعت: از 0 تا 23
روز هفته: از 0 (یکشنبه) تا 6 (شنبه)
روز ماه: از 1 تا 31
ماه: از 0 (ژانویه) تا 11 (دسامبر)
سال: سالهای سپریشده از ۱۹۰۰ به بعد
برای مثال، فرض کنید تاریخ زیر را تعریف کردهایم:
const xmas95 = new Date("1995-12-25");
در این حالت، دستور ()xmas95.getMonth مقدار ۱۱ و دستور ()xmas95.getFullYear مقدار ۱۹۹۵ را برمیگرداند.
متدهای getTime و setTime برای مقایسه تاریخها بسیار کاربردی هستند. متد getTime تعداد میلیثانیههای سپریشده از زمان مبدأ (Epoch) را برای آن شیء تاریخ برمیگرداند.
برای نمونه، کد زیر تعداد روزهای باقیمانده از سال جاری را محاسبه کرده و نمایش میدهد:
const today = new Date();
const endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // تنظیم روز و ماه
endYear.setFullYear(today.getFullYear()); // تنظیم سال روی سال جاری
const msPerDay = 24 * 60 * 60 * 1000; // تعداد میلیثانیهها در یک روز
let daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
daysLeft = Math.round(daysLeft); // روزهای باقیمانده از سال را رند میکند
در این مثال، ابتدا یک شیء تاریخ به نام today ساخته میشود که حاوی تاریخ امروز است. سپس شیء دیگری به نام endYear ایجاد شده و سال آن برابر با سال جاری قرار میگیرد. در نهایت با استفاده از تعداد میلیثانیههای موجود در یک روز و به کمک متد getTime، تفاضل بین امروز و پایان سال محاسبه شده و با گرد کردن عدد، تعداد روزهای باقیمانده به دست میآید.
متد parse نیز برای اختصاص دادن مقادیر از روی یک رشتهی متنیِ تاریخ به اشیاءِ تاریخِ موجود، بسیار مفید است. برای نمونه، کد زیر از parse و setTime استفاده میکند تا یک مقدار تاریخ مشخص را به شیء ipoDate اختصاص دهد:
const ipoDate = new Date();
ipoDate.setTime(Date.parse("Aug 9, 1995"));
در مثال زیر، تابع JSClock زمان فعلی را در قالب فرمت یک ساعت دیجیتال برمیگرداند:
function JSClock() {
const time = new Date();
const hour = time.getHours();
const minute = time.getMinutes();
const second = time.getSeconds();
let temp = String(hour % 12);
if (temp === "0") {
temp = "12";
}
temp += (minute < 10 ? ":0" : ":") + minute;
temp += (second < 10 ? ":0" : ":") + second;
temp += hour >= 12 ? " P.M." : " A.M.";
return temp;
}
این تابع ابتدا یک شیء تاریخ جدید به نام time میسازد. از آنجا که هیچ آرگومانی به آن پاس داده نشده، با تاریخ و زمان فعلی ایجاد میشود. سپس با صدا زدن متدهای getHours ،getMinutes و getSeconds مقادیر ساعت، دقیقه و ثانیهی فعلی به متغیرهای متناظرشان اختصاص داده میشوند.
در ادامه، دستورات بعدی یک رشتهی متنی را بر اساس این زمان پلهپله میسازند: ۱. ابتدا متغیر temp مقدار hour % 12 را میگیرد که همان ساعت در سیستم ۱۲ ساعته است. اگر ساعت ۰ باشد، دوباره مقدار ۱۲ به آن داده میشود تا نیمهشب و ظهر به جای ساعت 0:00، به صورت 12:00 نمایش داده شوند.
۲. دستور بعدی مقدار دقیقه را به انتهای متغیر temp اضافه میکند. اگر مقدار دقیقه کمتر از ۱۰ باشد، یک صفر قبل از آن میگذارد؛ در غیر این صورت، فقط یک دونقطه (:) برای جداسازی اضافه میکند. مقدار ثانیه نیز در خط بعدی دقیقاً به همین روش به رشته اضافه میشود.
۳. در نهایت، اگر مقدار ساعت اصلی (hour) مساوی یا بزرگتر از ۱۲ باشد عبارت ".P.M" و در غیر این صورت عبارت ".A.M" به انتهای متغیر temp چسبانده و خروجی داده میشود.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript