SHDate
اشیاء تاریخ جاوا اسکریپت یک لحظه در زمان را در قالبی مستقل از پلتفرم نشان می دهند. اشیاء تاریخ حاوی یک عدد هستند که نشان دهنده میلی ثانیه از 11 دی 1348 UTC
است.
توجه: TC39
روی Temporal،
یک API جدید تاریخ/زمان کار میکند. اطلاعات بیشتر در مورد آن را در وبلاگ Igalia
بخوانید. هنوز برای استفاده تولید آماده نیست!
شرح
دوره و مهرهای زمانی ECMAScript
تاریخ جاوا اسکریپت اساساً به عنوان تعداد میلی ثانیه هایی است که از دوره ECMAScript
گذشته است که به عنوان 11 دی 1348، UTC
(معادل دوره یونیکس) تعریف می شود.
توجه: مهم است که به خاطر داشته باشید که در حالی که مقدار زمان در قلب شیء Date UTC
است، متدهای اساسی برای واکشی تاریخ و زمان یا اجزای آن همگی در منطقه زمانی محلی (یعنی سیستم میزبان) و افست کار میکنند.
لازم به ذکر است که حداکثر Date
با حداکثر عدد صحیح امن یکسان نیست (Number.MAX_SAFE_INTEGER 9,007,199,254,740,991
است). در عوض، در ECMA-262
تعریف شده است که حداکثر ± 100,000,000 (صد میلیون) روز نسبت به 11 دی 1348 UTC (یعنی 20 آوریل 271821 قبل از میلاد تا 13 سپتامبر 275760 میلادی) می تواند با استاندارد D نشان داده شود. جسم (معادل ± 8,640,000,000,000,000 میلی ثانیه).
تبدیل فرمت تاریخ و منطقه زمانی
متد های مختلفی برای به دست آوردن تاریخ در قالب های مختلف و همچنین انجام تبدیل منطقه زمانی وجود دارد. به ویژه توابعی مفید هستند که تاریخ و زمان را در زمان هماهنگ جهانی (UTC
)، زمان استاندارد جهانی تعریف شده توسط استاندارد جهانی زمان، خروجی میدهند. (این زمان از نظر تاریخی به عنوان زمان گرینویچ شناخته می شود، زیرا UTC
در امتداد نصف النهار واقع شده است که لندن و گرینویچ نزدیک آن را در بریتانیا شامل می شود.) دستگاه کاربر زمان محلی را ارائه می دهد.
علاوه بر متد هایی برای خواندن و تغییر اجزای جداگانه تاریخ و زمان محلی (مانند getDay()
و setHours()
)، نسخه هایی از همان متد ها نیز وجود دارد که تاریخ و زمان را با استفاده از UTC
می خوانند و دستکاری می کنند
(مانند getUTCDay()
و setUTCHours()
).
Constructor
SHDate();
هنگامی که به عنوان یک تابع فراخوانی می شود، نمایش رشته ای از تاریخ و زمان فعلی را دقیقاً همانطور که SHDate().toString()
جدید برمی گرداند.
new SHDate();
هنگامی که به عنوان سازنده فراخوانی می شود، یک شی SHDate
جدید» را برمی گرداند.
Static methods
SHDate.now();
مقدار عددی مربوط به زمان فعلی را برمیگرداند - تعداد میلیثانیههای سپری شده از 11 دی 1348 ساعت 00:00:00 UTC،
با نادیده گرفتن ثانیههای کبیسه.
SHDate.parse();
نمایش رشته ای از تاریخ را تجزیه می کند و تعداد میلی ثانیه ها را از 11 دی 1348، 00:00:00 UTC،
با نادیده گرفتن ثانیه های کبیسه برمی گرداند.
توجه: تجزیه رشتهها با `SHDate.parse` به دلیل تفاوتها و ناسازگاریهای مرورگر به شدت ممنوع است.
SHDate.UTC();
پارامترهای مشابه طولانیترین شکل سازنده (یعنی 2 تا 7) را میپذیرد و تعداد میلیثانیهها را از 11 دی 1348، 00:00:00 UTC،
با نادیده گرفتن ثانیههای کبیسه برمیگرداند.
Instance methods
SHDate.getDate();
روز ماه (1–31) را برای تاریخ مشخص شده بر اساس زمان محلی برمیگرداند.
SHDate.getDay();
روز هفته (0-6) را برای تاریخ مشخص شده بر اساس زمان محلی برمی گرداند.
SHDate.getFullYear();
سال (4 رقم برای سالهای 4 رقمی) تاریخ مشخص شده را بر اساس زمان محلی برمی گرداند.
SHDate.getHours();
ساعت (0–23) را در تاریخ مشخص شده بر اساس زمان محلی برمیگرداند.
SHDate.getMilliseconds();
میلی ثانیه (0–999) را در تاریخ مشخص شده بر اساس زمان محلی برمی گرداند.
SHDate.getMinutes();
دقیقه ها (0–59) را در تاریخ مشخص شده بر اساس زمان محلی برمی گرداند.
SHDate.getMonth();
ماه (0–11) را در تاریخ مشخص شده بر اساس زمان محلی برمیگرداند.
SHDate.getSeconds();
ثانیه ها (0–59) را در تاریخ مشخص شده بر اساس زمان محلی برمی گرداند.
SHDate.getTime();
مقدار عددی تاریخ مشخص شده را به عنوان تعداد میلی ثانیه از 11 دی 1348، 00:00:00 UTC
برمیگرداند. (مقادیر منفی برای زمان های قبلی برگردانده می شوند.)
SHDate.getTimezoneOffset();
افست منطقه زمانی را در دقیقه برای منطقه فعلی برمیگرداند.
SHDate.getUTCDate();
روز (تاریخ) ماه (1-31) را در تاریخ مشخص شده مطابق با زمان جهانی برمیگرداند.
SHDate.getUTCDay();
روز هفته (0-6) را در تاریخ مشخص شده مطابق با زمان جهانی برمیگرداند.
SHDate.getUTCFullYear();
سال (4 رقم برای سالهای 4 رقمی) را در تاریخ مشخص شده مطابق با زمان جهانی برمی گرداند.
SHDate.getUTCHours();
ساعات (0-23) را در تاریخ مشخص شده مطابق با زمان جهانی برمیگرداند.
SHDate.getUTCMilliseconds();
میلی ثانیه (0–999) را در تاریخ مشخص شده با توجه به زمان جهانی برمیگرداند.
SHDate.getUTCMinutes();
دقیقه ها (0-59) را در تاریخ مشخص شده مطابق با زمان جهانی برمی گرداند.
SHDate.getUTCMonth();
ماه (0–11) را در تاریخ مشخص شده مطابق با زمان جهانی برمیگرداند.
SHDate.getUTCSseconds();
ثانیه های (0-59) را در تاریخ مشخص شده بر اساس زمان جهانی برمی گرداند.
SHDate.setDate();
روز ماه را برای یک تاریخ مشخص با توجه به زمان محلی تنظیم می کند.
SHDate.setFullYear();
سال کامل (مثلاً 4 رقم برای سالهای 4 رقمی) را برای یک تاریخ مشخص بر اساس زمان محلی تنظیم می کند.
SHDate.setHours();
ساعت ها را برای یک تاریخ مشخص با توجه به زمان محلی تنظیم می کند.
SHDate.setMilliseconds();
میلی ثانیه ها را برای یک تاریخ مشخص با توجه به زمان محلی تنظیم می کند.
SHDate.setMinutes();
دقیقه را برای یک تاریخ مشخص با توجه به زمان محلی تنظیم می کند.
SHDate.setMonth();
ماه را برای یک تاریخ مشخص با توجه به زمان محلی تنظیم می کند.
SHDate.setSeconds();
ثانیه ها را برای یک تاریخ مشخص با توجه به زمان محلی تنظیم می کند.
SHDate.setTime();
شیء SHDate
را بر روی زمانی تنظیم می کند که با تعدادی میلی ثانیه از 11 دی 1348، 00:00:00 UTC
نشان داده شده است. برای دفعات قبل از اعداد منفی استفاده کنید.
SHDate.setUTCDate();
روز ماه را برای یک تاریخ مشخص با توجه به زمان جهانی تنظیم می کند.
SHDate.setUTCFullYear();
سال کامل (به عنوان مثال 4 رقم برای سالهای 4 رقمی) را برای یک تاریخ مشخص مطابق با زمان جهانی تنظیم می کند.
SHDate.setUTCHours();
ساعت را برای یک تاریخ مشخص با توجه به زمان جهانی تنظیم می کند.
SHDate.setUTCMilliseconds();
میلی ثانیه ها را برای یک تاریخ مشخص با توجه به زمان جهانی تنظیم می کند.
SHDate.setUTCMinutes();
دقیقه را برای یک تاریخ مشخص با توجه به زمان جهانی تنظیم می کند.
SHDate.setUTCMonth();
ماه را برای یک تاریخ مشخص با توجه به زمان جهانی تنظیم می کند.
SHDate.setUTCSseconds();
ثانیه ها را برای یک تاریخ مشخص با توجه به زمان جهانی تنظیم می کند.
SHDate.toDateString();
بخش «تاریخ» از SHDate
را بهعنوان رشتهای قابل خواندن برای انسان مانند «پنجشنبه ۱۲ آوریل ۲۰۱۸» برمیگرداند.
SHDate.toISOSstring();
تاریخ را به رشته ای بر اساس فرمت توسعه یافته ISO 8601
تبدیل می کند.
SHDate.toJSON();
رشته ای را برمی گرداند که نشان دهنده SHDate
با استفاده از toISOSstring()
است. برای استفاده توسط JSON.stringify()
در نظر گرفته شده است.
SHDate.toGMTString();
رشتهای را برمیگرداند که نشاندهنده SHDate
بر اساس منطقه زمانی GMT (UTC)
است. به جای آن از toUTCString()
استفاده کنید.
SHDate.toLocaleDateString();
رشتهای را با نمایشی حساس از قسمت تاریخ این تاریخ بر اساس تنظیمات سیستم برمیگرداند.
SHDate.toLocaleString();
رشته ای را با نمایشی حساس به محلی از این تاریخ برمی گرداند. متد Object.toLocaleString()
را لغو می کند.
SHDate.toLocaleTimeString();
رشته ای را با محلی- نمایش حساس بخش زمانی این تاریخ، بر اساس تنظیمات سیستم.
SHDate.toString();
رشته ای را برمی گرداند که نشان دهنده شیء SHDate
مشخص شده است. متد Object.toString()
را لغو می کند.
SHDate.toTimeString();
بخش “زمان” از SHDate
را به عنوان یک رشته قابل خواندن توسط انسان برمیگرداند.
SHDate.toUTCString();
تاریخ را با استفاده از منطقه زمانی UTC
به رشته تبدیل می کند.
SHDate.valueOf();
مقدار اولیه یک شی Date
را برمیگرداند. متد Object.valueOf()
را لغو می کند.
Examples
چندین متد برای ایجاد یک شی Date
مثالهای زیر چندین راه برای ایجاد تاریخ جاوا اسکریپت را نشان میدهند:
توجه: تجزیه رشته های تاریخ با سازنده `Date` (و `SHDate.parse`، آنها معادل هستند) به دلیل تفاوت ها و ناهماهنگی های مرورگر به شدت ممنوع است.
let today = new SHDate();
// let birthday = new SHDate("26 Azar, 1374 03:24:00");
// let birthday = new SHDate("1374-08-26T03:24:00");
let birthday = new SHDate(1374, 8, 26); // the month is 0-indexed
let birthday = new SHDate(1374, 8, 26, 3, 24, 0);
let birthday = new SHDate(628021800000); // passing epoch timestamp
برای دریافت تاریخ، ماه و سال یا زمان
const date = new SHDate();
const [month, day, year] = [
date.getMonth(),
date.getDate(),
date.getFullYear()
];
const [hour, minutes, seconds] = [
date.getHours(),
date.getMinutes(),
date.getSeconds()
];
تفسیر سالهای دو رقمی
new SHDate()
رفتار نامطلوب و متناقض میراثی را با مقادیر سال دو رقمی نشان می دهد. به طور خاص، هنگامی که یک فراخوانی new SHDate()
یک مقدار سال دو رقمی داده می شود، آن مقدار سال به عنوان یک سال تحت اللفظی در نظر گرفته نمی شود و همانطور که هست استفاده نمی شود، بلکه به عنوان یک افست نسبی تفسیر می شود - در برخی موارد به عنوان یک جبران از سال 1900، اما در موارد دیگر، به عنوان جبران از سال 2000.
let date = new SHDate(1376, 11); // Sun 01 Esf 1376 00:00:00 GMT+0000 (GMT)
let date = new SHDate(1370, 11); // Wed 01 Esf 1370 00:00:00 GMT+0000 (GMT)
let date = new SHDate("1400/12/10"); // Tue 10 Esf 1400 00:00:00 GMT+0000 (GMT)
// Legacy method; always interprets two-digit year values as relative to 1900
date.setFullYear(1376);
date.toString(); // Sun 01 Esf 1376 00:00:00 GMT+0000 (GMT)
date.setFullYear(1300);
date.toString(); // Wed 01 Esf 1300 00:00:00 GMT+0000 (GMT)
بنابراین، برای ایجاد و دریافت تاریخهای بین سالهای 0 و 99، به جای آن از متدهای ترجیحی setFullYear()
و getFullYear()
استفاده کنید.
// Preferred method; never interprets any value as being a relative offset,
// but instead uses the year value as-is
date.setFullYear(98);
date.getFullYear(); // 98 (not 1398)
date.setFullYear(22);
date.getFullYear(); // 22 (not 1322, not 1422)
محاسبه زمان سپری شده مثال های زیر نحوه تعیین زمان سپری شده بین دو تاریخ جاوا اسکریپت را در میلی ثانیه نشان می دهد.
با توجه به طول های متفاوت روزها (به دلیل تغییر در تابستان)، ماه ها و سال ها، بیان زمان سپری شده در واحدهای بیشتر از ساعت، دقیقه و ثانیه نیاز به پرداختن به تعدادی از مسائل دارد و باید قبل از اقدام به طور کامل تحقیق شود.
// Using Date objects
let start = SHDate.now();
// The event to time goes here:
doSomethingForALongTime();
let end = SHDate.now();
let elapsed = end - start; // elapsed time in milliseconds
// Using built-in methods
let start = new SHDate();
// The event to time goes here:
doSomethingForALongTime();
let end = new SHDate();
let elapsed = end.getTime() - start.getTime(); // elapsed time in milliseconds
// To test a function and get back its return
function printElapsedTime(fTest) {
let nStartTime = SHDate.now(),
vReturn = fTest(),
nEndTime = SHDate.now();
console.log(`Elapsed time: ${String(nEndTime - nStartTime)} milliseconds`);
return vReturn;
}
let yourFunctionReturn = printElapsedTime(yourFunction);
توجه: در مرورگرهایی که از ویژگی زمان با وضوح بالا Web Performance API
پشتیبانی میکنند، Performance.now()
میتواند اندازهگیریهای مطمئنتر و دقیقتری از زمان سپری شده را نسبت به SHDate.now ()
ارائه دهد.
تعداد ثانیههای پس از ECMAScript Epoch
را دریافت کنید
let seconds = Math.floor(SHDate.now() / 1000);
در این مورد، مهم است که فقط یک عدد صحیح را برگردانید - بنابراین یک تقسیم ساده انجام نمی دهد. همچنین مهم است که فقط ثانیه های واقعی سپری شده را برگردانید. (به همین دلیل است که این کد از Math.floor() و نه Math.round() استفاده می کند.)