JavaScript Temporal.PlainDate
JavaScript Temporal.PlainDate بخشی از API جدید تاریخ و زمان در جاوااسکریپت به نام Temporal است که برای جایگزینی شیء قدیمی Date طراحی شده است.
📌 Temporal.PlainDate چیست؟
Temporal.PlainDate برای کار با تاریخ ساده (فقط سال، ماه و روز) استفاده میشود،
بدون ساعت، دقیقه، ثانیه و بدون منطقه زمانی (Time Zone).
یعنی اگر فقط با تاریخهایی مثل:
کار دارید (مثلاً تاریخ تولد، سررسید چک، تاریخ ثبتنام و…)، این کلاس بهترین انتخاب است.
🎯 چرا PlainDate مهم است؟
در شیء قدیمی Date مشکلاتی مثل این وجود دارد:
-
وابستگی به منطقه زمانی
-
تغییر ناخواسته تاریخ به خاطر UTC
-
باگهای مربوط به ساعت تابستانی
-
پارس کردن نامطمئن رشتههای تاریخ
اما Temporal.PlainDate:
✅ مستقل از TimeZone است
✅ دقیق و بدون خطای تبدیل
✅ خواناتر و استانداردتر
✅ immutable (غیرقابل تغییر)
🧱 ساختن یک PlainDate
1️⃣ با سازنده مستقیم
const date = new Temporal.PlainDate(2026, 2, 22);
console.log(date.toString());
// 2026-02-22
2️⃣ با parse کردن رشته
console.log(date.year); // 2026
console.log(date.month); // 2
console.log(date.day); // 22
🔎 ویژگیهای مهم
date.year
date.month
date.day
date.dayOfWeek
date.dayOfYear
date.daysInMonth
date.inLeapYear
مثال:
// 7 (اگر یکشنبه باشد)
➕ انجام عملیات روی تاریخ
اضافه کردن زمان
console.log(newDate.toString());
// 2026-03-04
کم کردن زمان
📅 مقایسه تاریخها
const d1 = Temporal.PlainDate.from(“2026-02-01”);
const d2 = Temporal.PlainDate.from(“2026-02-22”);
console.log(d1.until(d2).days);
// 21
🔁 Immutable بودن
const d1 = Temporal.PlainDate.from(“2026-02-22”);
const d2 = d1.add({ days: 5 });
console.log(d1.toString()); // هنوز 2026-02-22
console.log(d2.toString()); // 2026-02-27
شیء اصلی تغییر نمیکند 👌
🆚 تفاوت با Date
| ویژگی | Date | PlainDate |
|---|---|---|
| Time Zone دارد؟ | بله | ❌ ندارد |
| ساعت دارد؟ | بله | ❌ ندارد |
| Immutable است؟ | ❌ | ✅ |
| خطای UTC دارد؟ | زیاد | ❌ |
📌 چه زمانی استفاده کنیم؟
از Temporal.PlainDate استفاده کنید وقتی:
-
تاریخ تولد ذخیره میکنید
-
سیستم ثبتنام دارید
-
برنامه نوبتدهی مینویسید
-
تقویم بدون ساعت نیاز دارید
-
تاریخ مالی / حسابداری دارید
⚠ وضعیت پشتیبانی
Temporal هنوز در همه مرورگرها به صورت کامل فعال نیست،
اما در نسخههای جدید Node.js و برخی مرورگرها با flag فعال میشود.
در صورت نیاز میتوان از polyfill استفاده کرد.
دیدگاهتان را بنویسید