چرا باید Temporal رو جای Date به کار ببری
خلاصهٔ کاملتر
قانون prefer-temporal یکی از قانونهای eslint-plugin-unicorn هست که پیشنهاد میکنه بهجای شیء قدیمیِ Date از Temporal استفاده کنی. توی مستندات اومده که Temporal جایگزین مدرن Date هست و خیلی از دردسرهای دیرینهٔ اون رو نداره: ماههایی که از صفر شروع میشن، قابل تغییر بودن (mutable)، نبودِ منطقهٔ زمانی یا تقویم، و پارس کردن رشتهها که رفتارش بین پلتفرمها فرق میکنه و غیرقابلاعتماده.
Temporal بهجای اینها یه سری تایپِ مخصوص و تغییرناپذیر (immutable) میده، مثل Temporal.Instant، Temporal.PlainDate و Temporal.ZonedDateTime، که پارس و محاسبات دقیقی دارن. مثلاً برای گرفتن لحظهٔ فعلی بهجای new Date() میتونی بنویسی:
const now = Temporal.Now.instant();این قانون تا حدی هم خودش کد رو درست میکنه. Date.now() بهصورت خودکار به معادلش که همون میلیثانیههای epoch رو برمیگردونه تبدیل میشه. برای new Date() و new Date(milliseconds) چند معادل دقیق بهشکل پیشنهاد (suggestion) ارائه میشه. ولی حالتهایی مثل پارس کردن رشته یا اجزای تقویمی یه جایگزین قطعی ندارن، چون تایپ درست به این بستگی داره که دقیقاً چی میخوای؛ برای همین فقط گزارش میشن.
این قانون چند تا گزینهٔ اختیاری هم داره که همه بهصورت پیشفرض خاموشن. checkDateNow باعث میشه Date.now() هم علامت بخوره؛ این مورد چون فقط یه عدد ساده برمیگردونه معمولاً مشکلی نداره و پیشفرض مجازه. checkReferences ارجاعهای خالی به Date (مثل instanceof Date) رو گیر میده. checkMethods هم متدهایی که روی نمونههای Date صدا زده میشن (مثل getFullYear) رو بررسی میکنه، ولی این یکی به اطلاعات نوع (type information) نیاز داره و بدون لینتِ نوعآگاه کار نمیکنه.
به گفتهٔ مستندات، Temporal به مرحلهٔ Stage 4 رسیده و بخشی از ECMAScript 2026 هست. توی Node.js نسخهٔ ۲۶ و مرورگرهای جدید بدون فلگ در دسترسه و برای محیطهای قدیمیتر میتونی از پکیج @js-temporal/polyfill استفاده کنی. جالبه که این قانون توی هیچکدوم از کانفیگهای recommended و unopinionated فعال نیست و باید دستی روشنش کنی.
نکات کلیدی:
- prefer-temporal استفاده از Temporal رو جای Date قدیمی پیشنهاد میکنه.
- Date مشکلهایی مثل ماه صفرمبنا، تغییرپذیری و پارس ناپایدار رشته داره.
- Temporal تایپهای تغییرناپذیر و دقیق مثل PlainDate و Instant میده.
- Date.now() خودکار اصلاح میشه؛ بقیهٔ حالتها پیشنهاد یا فقط گزارش میشن.
- Temporal به Stage 4 رسیده و بخشی از ECMAScript 2026 هست.




