javascriptDate and Intl.DateTimeFormatتاریخ و Intl در جاوااسکریپت
Date و Intl در جاوااسکریپت را با زمان ثابت UTC بررسی کنید؛ تفاوت زمان ذخیرهشده و نمایش محلی، تاریخ نامعتبر و قالببندی مشخص را بشناسید.
مفهوم به زبان ساده
در برنامه، زمان ذخیرهشده و شکل نمایش آن دو موضوع جدا هستند. Date یک نقطهٔ زمانی را با مقدار عددی میلیثانیه نگه میدارد؛ خود شیء تاریخِ شمسی یا قالب فارسیِ آماده نیست. روشهایی که از منطقهٔ زمانی محلی استفاده میکنند، میتوانند روی دو دستگاه نمایش متفاوت بدهند. پس هنگام خواندن یا نمایش زمان، قرارداد منطقهٔ زمانی را روشن کنید.
نمونه از یک رشتهٔ استاندارد با Z استفاده میکند تا زمان UTC مشخص باشد. toISOString نمایش استاندارد آن لحظه را میدهد. سپس Intl.DateTimeFormat را با منطقهٔ UTC، تقویم میلادی و رقم لاتین تنظیم میکنیم. formatToParts بخشهای سال و ماه و روز را جدا میدهد تا نمونه به تفاوت جداکنندههای نمایشی وابسته نباشد. برای رابط فارسی میتوان زبان و تقویم مناسب محصول را صریحاً انتخاب کرد.
تاریخ خراب میتواند شیء Date با مقدار زمانی NaN بسازد؛ صرف داشتن شیء، معتبر بودن تاریخ را اثبات نمیکند. همچنین برخی ورودیهای تاریخی ممکن است عادیسازی شوند؛ اگر قرارداد شما تاریخ تقویمی دقیق میخواهد، اجزای آن را جدا اعتبارسنجی کنید. این مثال تقویم یا زمانبند کامل نیست. برای تمرین، منطقهٔ نمایش را تغییر دهید و تفاوت «لحظهٔ ذخیرهشده» با «روز محلیِ نمایشدادهشده» را توضیح دهید.
کجا به کار میآید؟
- تفکیک زمان استاندارد ذخیرهشده از نمایش مناسب زبان کاربر
- تشخیص تاریخ آشکارا نامعتبر پیش از استفاده از آن
از تعریف تا یک مثال واقعی
const instant = new Date('2026-01-02T03:04:05Z');
const formatter = new Intl.DateTimeFormat('en-GB', {
timeZone: 'UTC',
calendar: 'gregory',
numberingSystem: 'latn',
year: 'numeric', month: '2-digit', day: '2-digit'
});
const parts = Object.fromEntries(
formatter.formatToParts(instant)
.filter((part) => part.type !== 'literal')
.map((part) => [part.type, part.value])
);
console.log(instant.toISOString());
console.log([parts.year, parts.month, parts.day].join('-'));
console.log(Number.isNaN(new Date('not-a-date').getTime()));
2026-01-02T03:04:05.000Z 2026-01-02 true
این مثال چطور کار میکند؟
رشتهٔ دارای Z لحظهٔ مشخص UTC را میسازد.
Intl با تنظیمات صریح، بخشهای تقویمی قابل پیشبینی میدهد.
getTime برای تاریخ نامعتبر NaN است و بررسی آخر true میشود.
اشتباه رایج
نمایش پیشفرض تاریخ به زبان و منطقهٔ دستگاه وابسته است. همچنین موفقبودن ساخت Date همیشه به معنی معتبر بودن تاریخ مورد نظر در قرارداد شما نیست.
این را به خاطر بسپارید
لحظه را با قرارداد روشن نگه دارید و زبان، تقویم و منطقهٔ نمایش را جدا تعیین کنید.