یک نکتهی تکمیلی: روش سفارشی سازی خروجی نهایی تاریخ
همانطور که در متن نیز عنوان شد، خروجی تبدیل زیر
const date = new Date(Date.UTC(2020, 1, 20, 3, 0, 0, 200));
const faDate = new Intl.DateTimeFormat("fa", {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric"
}).format(date);
console.log(faDate);
معادل «۱۳۹۸ اسفند ۱, پنجشنبه» است که ... آنچنان مطلوب نیست. در یک چنین حالتی برای دسترسی به اجزای خروجی این فرمت کننده، میتوان از متد استاندارد formatToParts استفاده کرد:
const date = new Date(Date.UTC(2020, 1, 20, 3, 0, 0, 200));
const faDateParts = new Intl.DateTimeFormat("fa", {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric"
}).formatToParts(date);
console.log(faDateParts);
که این خروجی را باز میگرداند:
[
{ type: "year", value: "۱۳۹۸" },
{ type: "literal", value: " " },
{ type: "month", value: "اسفند" },
{ type: "literal", value: " " },
{ type: "day", value: "۱" },
{ type: "literal", value: ", " },
{ type: "weekday", value: "پنجشنبه" }
]
که آرایهای است از اشیاء type و value. اکنون با استفاده از قطعه کد زیر، این آرایه را
تبدیل به یک شیء میکنیم که نام هر خاصیت آن، یک type است و مقدار آن value شیء متناظر:
const { year, literal, month, day, weekday } = Object.fromEntries(
new Intl.DateTimeFormat("fa", {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric"
})
.formatToParts(date)
.map(item => [item.type, item.value])
);
سپس با استفاده از Objects Destructuring این شیء را به چند متغیر نسبت دادهایم. اکنون با دسترسی به مقادیر سال و ماه و غیره، هر طور که نیاز بود میتوان آنها را فرمت کرد. برای مثال:
const faDate = `${weekday}${literal}${day} ${month} ${year}`;
console.log(faDate);
با این خروجی:
«پنجشنبه, ۱ اسفند ۱۳۹۸»