<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهرداد</title>
        <link>https://virgool.io/feed/@mehrta</link>
        <description>برنامه نویس و مشاور فریمورک انگولار</description>
        <language>fa</language>
        <pubDate>2026-06-16 21:22:24</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>مهرداد</title>
            <link>https://virgool.io/@mehrta</link>
        </image>

                    <item>
                <title>شروع کردیم!</title>
                <link>https://virgool.io/BookSara/%D8%B4%D8%B1%D9%88%D8%B9-%DA%A9%D8%B1%D8%AF%DB%8C%D9%85-gomehr4w3zh8</link>
                <description>سلام. ما اینجا کتاب میفروشیم! به زودی فروش کتاب توی سایت ویرگول و تلگرام رو شروع میکنیم!کتاب ها در این موضوعات منتشر خواهد شد:کامپیوترارز دیجیتالآدرس کانال تلگرام ما: https://t.me/BookSaraStore</description>
                <category>مهرداد</category>
                <author>مهرداد</author>
                <pubDate>Sun, 16 Jun 2024 10:04:43 +0330</pubDate>
            </item>
                    <item>
                <title>کتابخانه جاوااسکریپت JSS-Date: کلاس DateTime</title>
                <link>https://virgool.io/@mehrta/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D8%AC%D8%A7%D9%88%D8%A7%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-jss-date-%DA%A9%D9%84%D8%A7%D8%B3-datetime-klety7zwhkn6</link>
                <description>کتابخانه JSS-Date یک کتابخانه جاوااسکریپتی برای کار با تاریخ است.در مقاله قبل، شما را با کتابخانه جاوااسکریپتی JSS-Date آشنا کردیم. در این مقاله می‌خواهیم بیشتر در مورد شی اصلی این کتابخانه یعنی DateTime صحبت کنیم.شی DateTime همانند شی Date در جاوااسکریپت، مشخص کننده یک تاریخ و زمان خاص است. هنگام ساخت این شی می‌توانید (به صورت اختیاری) تقویم، time-zone و locale را مشخص کنید:const d = new DateTime({
    calendar: &#039;persian&#039;,
    zone: &#039;Asia/Tehran&#039;,
    locale: &#039;fa&#039;
}, 1400, 11, 1);در صورتی که یکی از پارامترهای تقویم، time-zone و locale را مشخص نکنید، از مقادیر پیش فرض استفاده خواهد شد (مقاله قبلی را بخوانید).در ادامه، متدها و فیلدهای کلاس DateTime را شرح می‌دهیم:فیلدهای ms ،second ،minute ،hour ،day ،month ،yearبه ترتیب مقادیر سال، ماه، روز، ساعت، دقیقه، ثانیه و میلی ثانیه را مشخص می‌کنند.فیلد tsتعداد میلی ثانیه های سپری شده از یک مبدا زمانی را نشان می‌دهد. مقدار و معنی این فیلد بستگی به پیاده سازی شی Calendar دارد. فیلد configیک شی که مقادیر Calendar, Locale و Zone را مشخص می‌کند. برای هر شی DateTime این سه مقدار حتما غیر null هستند (مقدار دارند).{
  calendar: Calendar,
  locale: Locale,
  zone: Zone
}فیلد calendarتقویم (Calendar) مورد استفاده توسط این DateTime را برمی گرداند.فیلد localeلوکل (Locale) مورد استفاده توسط این DateTime را برمی گرداند.فیلد zoneمنطقه زمانی (Zone) مورد استفاده توسط این DateTime را برمی گرداند.متد ()dateیک DateTime معادل با این شی ایجاد می‌کند ولی مقدار ساعت، دقیقه، ثانیه و میلی ثانیه آن را با صفر مقداردهی می‌کند.متد ()toیک DateTime معادل با این شی و با تقویم مشخص شده را ایجاد می‌کند. با استفاده از این متد می‌توانید به سادگی تاریخ ها را از یک تقویم به تقویم دیگر تبدیل کنید (مثلا از میلادی به شمسی).const d1 = new DateTime({calendar: &#039;gregorian&#039;}, 2022, 1, 21);

const d2 = d1.to(&#039;persian&#039;);
console.log(d2.year, d2.month, d2.day); // 1400, 11, 1

const d3 = d2.to(&#039;hijri&#039;);
console.log(d3.year, d3.month, d3.day); // 1443, 6, 18متد ()toZoneیک DateTime معادل با این شی و با Zone مشخص شده را ایجاد می‌کند. با استفاده از این متد می‌توانید منطقه زمانی را تغییر دهید:const d1 = new DateTime({zone: Zones.utc}, 2022, 1, 21, 0, 0, 0, 0); 
// hour=minute=second=ms=0

const d2 = d1.toZone(Zones.iana(&#039;Asia/Tehran&#039;));
console.log(d2.hour, d2.minute, d2.second); // 3, 30, 0متد ()toLocaleیک DateTime معادل با این شی و با Locale مشخص شده ایجاد می‌کند. زمانی که یک DateTime را به رشته تبدیل می‌کنید(مثلا به کمک پلاگین format) ، نام روزهای هفته، ماه و نوع نمایش اعداد با توجه به Locale مشخص می‌شود:import { format } from &#039;@js-suger/date/plugins/format&#039;;

const d1 = new DateTime({locale: &#039;fa&#039;, calendar: &#039;persian&#039;}, 1400, 1, 1);
console.log(format(d1, &#039;MMMM&#039;)); // فروردین

const d2 = d1.toLocale(&#039;en&#039;);
console.log(format(d2, &#039;MMMM&#039;)); // Farvardinمتد ()toLocalیک DateTime معادل با این شی و با Zone محلی ایجاد می‌کند. این متد منطقه زمانی شی را به منطقه زمانی محلی (منطقه زمانی کامپیوتری که برنامه روی آن اجرا می‌شود) تغییر می‌دهد.const d1 = new DateTime({zone: Zones.utc});
const d2 = d1.toLocal(); // d2 would be in your local time zoneمتد ()toUtcیک DateTime معادل با این شی و با منطقه زمانی UTC ایجاد می‌کند. این متد منطقه زمانی شی را به منطقه زمانی UTC تغییر می‌دهد.const d1 = new DateTime({zone: Zones.local});
const d2 = d1.toUtc(); // d2 would be in UTC time zoneدر مقالات آینده با دیگر اجزای این کتابخانه آشنا خواهید شد.مقالاتی که تا کنون در رابطه با کتابخانه جاوااسکریپتی JSS-Date منتشر کرده ایم:بازنشستگی کتابخانه Moment.jsکتابخانه جاوااسکریپت JSS-Date: معرفیکتابخانه جاوااسکریپت JSS-Date: کلاس DateTimeریپازیتوری پروژه (جهت ثبت باگ و درخواست افزودن قابلیت‌های جدید):https://github.com/js-sugar/dateمستندات پروژه:https://js-sugar.github.io/date</description>
                <category>مهرداد</category>
                <author>مهرداد</author>
                <pubDate>Fri, 21 Jan 2022 18:52:31 +0330</pubDate>
            </item>
                    <item>
                <title>کتابخانه جاوااسکریپت JSS-Date: معرفی</title>
                <link>https://virgool.io/@mehrta/httpsvirgooliomehrta%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D8%AC%D8%A7%D9%88%D8%A7%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-jss-date-d18gsafhpr82</link>
                <description>کتابخانه JSS-Date یک کتابخانه جاوااسکریپتی برای کار با تاریخ و زمان است. هدف از طراحی این کتابخانه، رفع کاستی‌های کتابخانه‌های موجود و پشتیبانی از تقویم‌هایی به غیر از تقویم میلادی (تقویم هجری قمری، هجری شمسی و غیره) است.در مقاله قبلی، به اختصار وضعیت کتابخانه معروف moment.js را بررسی کردیم. از مشکلات کتابخانه moment.js می توان به موارد زیر اشاره کرد:پشتیبانی ضعیف از تقویم هایی به غیر از تقویم میلادیتغییر پذیر بودن اشیا (mutable بودن)حجم نسبتا بالاعدم پشتیبانی از Tree-Shakingعدم پشتیبانی مناسب از Intl APIبعضی از کتابخانه‌های جاوااسکرپتی مانند کتابخانه Luxon بخشی از این مشکلات را رفع کرده‌اند اما همه آنها مبتنی بر تقویم میلادی هستند. کتابخانه JSS-Date با هدف رفع همه این کاستی‌ها طراحی و ساخته شده است. هنگام طراحی این کتابخانه، موارد زیر مد نظر قرار گرفته شده است:پشتیبانی از تقویم‌هایی غیر از میلادی (شمسی، هجری قمری و غیره)توسعه‌پذیر بودن (قابلیت ایجاد تقویم، Locale و پلاگین‌های جدید) حجم کمپشتیبانی از Tree-Shakingطراحی Immutable و پیاده سازی API کلاس DateTime به صورت فلوئنتنصبکتابخانه JSS-Date در ریپازیتوری npm موجود است:npm install @js-sugar/date --saveکتابخانه JSS-Date روی سرور (node.js) و همچنین مرورگر اجرا می‌شود.پیکربندی پروژهبرای استفاده از این کتابخانه، ابتدا باید تقویم‌هایی که در پروژه نیاز دارید را import و معرفی کنید. این کار را در هنگام شروع پروژه (Startup) و برای یک بار انجام می‌دهیم.این کتابخانه مستقل از تقویم طراحی شده است، به این معنا که هیچ تفاوتی بین تقویم میلادی و بقیه تقویم ها وجود ندارد. زمانی که یک شی DateTime ساخته می‌شود، پارامتر تقویم به سازنده آن شی داده می‌شود. در ادامه به نحوه ساخت اشیا تاریخ خواهیم پرداخت. فعلا فقط باید مشخص کنیم که در پروژه مان با چه تقویم هایی سر و کار داریم:import { Calendars } from &#039;@js-sugar/date&#039;;
import { GregorianCalendar } from &#039;@js-sugar/date/calendars/gregorian&#039;;
import { PersianCalendar } from &#039;@js-sugar/date/calendars/persian&#039;;
import { HijriCalendar } from &#039;@js-sugar/date/calendars/hijri&#039;;

Calendars.add(new GregorianCalendar(&#039;gregorian&#039;)); 
Calendars.add(new PersianCalendar(&#039;persian&#039;));
Calendars.add(new HijriCalendar (&#039;hijri&#039;));به ازای هر تقویم، یک کلاس مجزا وجود دارد. در اینجا کلاس‌های GregorianCalendar ،PersianCalendar و HijriCalendar را import کرده‌ایم. تنها کاری که باید انجام دهیم این است که از هر تقویم یک شی بسازیم و به مجموعه تقویم های پروژه ( کلاس Calendars) اضافه کنیم.هر تقویم یک شناسه یکتا (ID) در سرتاسر پروژه دارد که در هنگام ساخت تقویم به سازنده (constructor) آن داده می‌شود. بعد از ساخت اشیا Calendar، آنها را به مجموعه تقویم های پروژه (کلاس Calendars) اضافه می‌کنیم. اولین تقویمی که به مجموعه Calendars اضافه می‌شود، تقویم پیش فرض پروژه خواهد بود.همه تقویم‌ها از کلاس پایه Calendar به ارث می‌برند. شما به راحتی می‌توانید تقویم خودتان را پیاده سازی کنید فقط باید چند متد abstract را پیاده سازی کنید.پیکربندی کتابخانه را تنها در هنگام startup پروژه انجام می‌دهیم. بعد از آن فقط به سادگی اشیا DateTime را تولید و استفاده می‌کنیم. اگر از فریم‌ورک‌های جاوااسکریپتی مانند Angular یا React استفاده می‌کنید، مطمئن شوید که کد مربوط به افزودن تقویم ها به کلاس Calendars فقط یک بار اجرا می‌شود.در تمامی مثال‌های این مقاله فرض شده است که یک  تقویم میلادی (با شناسه gregorian)، یک تقویم شمسی (با شناسه persian) و یک تقویم هجری قمری (با شناسه hijri) به پروژه اضافه شده است.ایجاد شی DateTimeشی اصلی کتابخانه JSS-Date شی DateTime است. این شی مقدار تاریخ و زمان (با توجه به یک تقویم خاص) را در خود نگهداری می‌کند. شی DateTime به 3 پارامتر وابستگی دارد:تقویمدر هنگام ساخت شی DateTime می‌توانیم تقویم مورد استفاده را به عنوان یکی از پارامترهای سازنده (constructor) مشخص کنیم. اگر تقویم را مشخص نکنیم، تقویم پیش فرض پروژه به عنوان تقویم این شی منظور خواهد شد.لوکل (Locale)زمانی که می‌خواهیم بخش‌هایی از یک تاریخ را به رشته تبدیل کنیم، باید زبان مورد استفاده را مشخص کنیم. مثلا اگر یک شی DateTime داشته باشید که تقویم آن هجری شمسی است و مقدار آن برابر 1400/2/27 است و می‌خواهید مقدار &quot;ماه&quot; این شی را به صورت رشته‌ای نمایش دهید، باید مشخص کنید که این نمایش در چه زبانی صورت گیرد. اگر زبان فارسی باشد، خروجی رشته &quot;اردیبهشت&quot; و اگر زبان انگلیسی باشد، خروجی رشته &quot;Ordibehesht&quot; خواهد بود. البته یک لوکل فقط شامل کلمات نیست، بلکه علائم و دیگر مشخصه‌های یک ناحیه جغرافیایی (معمولا یک کشور) را نیز شامل می‌شود.اگر هنگام ساخت یک DateTime لوکل را مشخص نکنیم، از لوکل پیشفرض پروژه استفاده خواهد شد.   منطقه زمانی (Time Zone)منطقه زمانی اختلاف ساعت شما با ساعت هماهنگ جهانی (UTC) را مشخص می‌کند. برای مثال منطقه زمانی Asia/Tehran یک اختلاف 3:30+ با UTC دارد.اگر هنگام ساخت یک DateTime منطقه زمانی را مشخص نکنیم، از منطقه زمانی سیستمی که برنامه روی آن اجرا می‌شود استفاده خواهد شد.در هنگام ساخت یک شی DateTime، مقدار تقویم، لوکل و منطقه زمانی آن مشخص می‌شود (صراحتا و یا ضمنی)  و بعد از آن به هیچ عنوان تغییر نمی‌کند. در واقع شی DateTime یک شی Immutable است و بعد از ساخته شدن، به هیچ عنوان تغییر نمی‌کند.در ادامه با نحوه ایجاد و استفاده از اشیا DateTime آشنا خواهید شد.مثال: ساخت یک DateTime که تقویم آن شمسی و مقدار آن برابر زمان جاری سیستم است:import { DateTime } from &#039;@js-sugar/date&#039;;

const pc = Calendars.find(&#039;persian&#039;); // find a Calendar by its ID
const d = new DateTime({calendar: pc});
console.log(d.year, d.month, d.day, d.hour, d.minute, d.second, d.ms); 
// output will be something like this: 1400, 5, 29, 12, 55, 50, 223در مثال بالا، ابتدا تقویم فارسی را با متد find از مجموعه تقویم‌های پروژه جستجو کرده‌ایم و سپس آن را به سازنده کلاس DateTime داده‌ایم. یک راه ساده‌تر برای ساخت اشیا DateTime به صورت زیر است:const d = new DateTime({calendar: &#039;persian&#039;});در کد بالا، شناسه (ID) تقویم را به صورت مستقیم به سازنده DateTime داده‌ایم. در این حالت، شی DateTime تقویم مربوطه را از میان تقویم‌های پروژه (Calendars) جستجو و پس از یافتن از آن استفاده خواهد کرد. مثال: ساخت یک DateTime با تقویم شمسی و یک مقدار مشخص:import { DateTime } from &#039;@js-sugar/date&#039;;

const d = new DateTime({calendar: &#039;persian&#039;}, 1400, 8, 21);
console.log(d.year, d.month, d.day, d.hour, d.minute, d.second, d.ms); 
// output: 1400, 8, 21, 0, 0, 0, 0مثال: ساخت یک DateTime با تقویم میلادی و یک مقدار مشخص:import { DateTime } from &#039;@js-sugar/date&#039;;

const d = new DateTime({calendar: &#039;gregorian&#039;}, 2020, 10, 27);
console.log(d.year, d.month, d.day); // output: 2020, 10, 27مثال: ساخت یک DateTime با تقویم پیش فرض و زمان جاری سیستم:import { DateTime } from &#039;@js-sugar/date&#039;;

const d = new DateTime();
console.log(d.year, d.month, d.day); 
// The output depends on the default Calendar of the project اولین تقویمی که به کلاس Calendars اضافه می‌شود، تقویم پیش فرض پروژه خواهد شد. اگر بعدا تصمیم به تغییر تقویم پیش‌فرض پروژه داشتید، به این روش می‌توانید تقویم پیش‌فرض را تغییر دهید:import { Calendars } from &#039;@js-sugar/

Calendars.default = Calendars.find(&#039;hijri&#039;);سازنده کلاس DateTimeجهت سهولت ایجاد اشیا DateTime، سازنده این کلاس دارای چندین overload است:DateTime();
DateTime(options);
DateTime(year, month, day?, hour?, minute?, second?, ms?, options?);
DateTime(options, year, month, day?, hour?, minute?, second?, ms?);
DateTime(timestamp, options?);پارامترهایی که اختیاری هستند با یک علامت سوال (?) مشخص شده‌اند. اگر پارامتری مشخص نشود، از مقادیر پیش‌فرض استفاده خواهد شد. مقدار پیش‌فرض برای پارامتر روز برابر 1 و برای پارامترهای ساعت، دقیقه، ثانیه و میلی ثانیه برابر 0 است.پارامتر اختیاری options یک شی با سه فیلد اختیاری است:{
  calendar?: string | Calendar,
  locale?: string | Locale,
  zone?: string | Zone
}با استفاده از این پارامتر، می‌توانید تقویم، locale و zone شی DateTime را مشخص کنید. اگر این مقادیر را مشخص نکنید، از مقادیر پیش‌فرض استفاده خواهد شد.اگر calendar را مشخص نکنید، از تقویم پیش‌فرض برنامه استفاده می‌شود. مقدار این پارامتر می‌تواند یک شی Calendar و یا یک رشته که مشخص کننده ID یک تقویم است باشد. اگر از ID یک تقویم استفاده می‌کنید، این تقویم باید قبلا به مجموعه تقویم‌های برنامه (کلاس Calendars) اضافه شده باشد.اگر locale مقدار نداشته باشد، از locale پیش‌فرض استفاده می‌شود. locale پیش‌فرض برابر locale کامپیوتری است که برنامه را اجرا می‌کند، مگر اینکه شما آن را تغییر دهید. مقدار این پارامتر می‌تواند یک شی Locale و یا یک رشته که مشخص کننده نام یک locale است باشد. اگر zone مقدار نداشته باشد، از zone سیستم استفاده می‌شود. مقدار این پارامتر می‌تواند یک شی Zone و یا یک رشته که مشخص کننده یک منطقه زمانی استاندارد (IANA) است باشد. لیست مناطق زمانی IANA را می‌توانید از سایت ویکیپدیا یا سایت IANA مشاهد کنید. برای مثال رشته &quot;Asia/Tehran&quot; یک منطقه زمانی IANA معتبر است.مثال: ساخت یک شی DateTime با تقویم شمسی و locale فارسی const d = new DateTime({calendar: &#039;persian&#039;, locale: &#039;fa-IR&#039;}, 1400, 9, 2);تبدیل تاریخ‌هاتبدیل کردن یک DateTime به یک DateTime متناظر با آن ولی با تقویمی متفاوت، بسیار آسان است. برای این کار از متد to شی DateTime استفاده میکنیم.متد to، یک شی Calendar و یا شناسه یک Calendar (که به مجموعه تقویم‌های پروژه اضافه شده است) را می‌گیرد و یک DateTime جدید و معادل با تقویم مورد نظر را ایجاد می‌کند.مثال: تبدیل یک DateTime با تقویم میلادی به یک DateTime با تاریخ شمسی معادل با آنconst d1 = new DateTime({calendar: &#039;gregorian&#039;}, 2021, 11, 25);
const d2 = d1.to(&#039;persian&#039;);  // OR ==&gt;  d2 = d1.to(Calendars.find(&#039;persian&#039;));
console.log(d2.year, d2.month, d2.day); // output: 1400, 9, 4مثال: تبدیل یک DateTime با تقویم شمسی به یک DateTime با تاریخ میلادی معادل با آنconst d1 = new DateTime({calendar: &#039;persian&#039;}, 1400, 9, 4);
const d2 = d1.to(&#039;gregorian&#039;);  // OR ==&gt;     d2 = d1.to(Calendars.find(&#039;gregorian&#039;));
console.log(d2.year, d2.month, d2.day); // output: 2021, 11, 25پشتیبانی و گزارش خطابرای گزارش باگ یا ثبت درخواست برای افزودن قابلیت جدید، به ریپازیتوری پروژه JSS-Date مراجعه کنید:https://github.com/js-sugar/dateدر مقاله‌های بعدی، شما را بیشتر با قابلیت‌های کتابخانه JSS-Date آشنا خواهیم کرد.مقالاتی که تا کنون در رابطه با کتابخانه جاوااسکریپتی JSS-Date منتشر کرده ایم:بازنشستگی کتابخانه Moment.jsکتابخانه جاوااسکریپت JSS-Date: معرفیکتابخانه جاوااسکریپت JSS-Date: کلاس DateTimeریپازیتوری پروژه (جهت ثبت باگ و درخواست افزودن قابلیت‌های جدید):https://github.com/js-sugar/dateمستندات پروژه:https://js-sugar.github.io/date</description>
                <category>مهرداد</category>
                <author>مهرداد</author>
                <pubDate>Thu, 25 Nov 2021 23:00:09 +0330</pubDate>
            </item>
                    <item>
                <title>بازنشستگی کتابخانه Moment.js</title>
                <link>https://virgool.io/@mehrta/%D8%A8%D8%A7%D8%B2%D9%86%D8%B4%D8%B3%D8%AA%DA%AF%DB%8C-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-momentjs-khi70wgzyr8a</link>
                <description> اگر برنامه نویس جاوا اسکریپت هستید، به احتمال زیاد با کتابخانه Moment.js آشنایی دارید یا حداقل نام آن را شنیده اید. Moment.js معروف‌ترین کتابخانه برای کار با تاریخ و زمان در زبان برنامه نویسی جاوا اسکریپت است. در زمان نگارش این مقاله، تعداد دانلود هفتگی این کتابخانه (از سایت NPM) تقریبا 12 میلیون دانلود در هفته است! اما این پروژه به دلیل مشکلاتی که در طراحی دارد، توسط توسعه دهندگان آن بازنشسته شده است. اگر وارد سایت Moment.js شوید، در صفحه وضعیت پروژه، دلایل بازنشسته کردن پروژه را خواهید دید. در ادامه این دلایل را بررسی خواهیم کرد.We now generally consider Moment to be a legacy project in maintenance mode. It is not dead, but it is indeed done.source: https://momentjs.com/docs/#/-project-status/دلایل بازنشسته کردن پروژه:برخی از دلایلی که برنامه نویسان Moment.js در سایت رسمی این پروژه قید کرده اند:تغییرپذیر بودن (Mutable) اشیاتغییرناپذیری (Immutability) اشیا، یعنی اینکه بعد از ساخته شدن یک شئ، نتوان فیلدهای آن را دستکاری کرد. در واقع شئ به حالت فقط-خواندنی در می‌آید. این ویژگی در بسیاری از مواقع مطلوب است (مخصوصا هنگام کار کردن با فریمورک های جاوااسکریپتی مانند Angular, React و غیره).اشیا Moment تغییرپذیر هستند. شما  به سادگی میتوانید بعد از ساخته شدن یک شی Moment، مقادیر آن را تغییر دهید.پشتیبانی نکردن از Tree-Shakingکتابخانه Moment.js از Tree-shaking پشتیبانی نمی‌کند. همین موضوع باعث می‌شود که همه کد این کتابخانه در خروجی برنامه شما کپی شود، حتی اگر به بخش کوچکی از این کتابخانه نیاز داشته باشید. یک شئ Moment دارای دهها متد است که به احتمال زیاد به بسیاری از آنها نیاز ندارید. «درخت تکانی» یا Tree-shaking یک تکنیک برای حذف کدهای استفاده نشده در برنامه های جاوااسکریپتی است. ابزارهایی مانند WebPack، به کمک این روش کدهای استفاده نشده در برنامه را تشخیص می‌دهند و آنها را در خروجی خود کپی نمی‌کنند.اندازهاندازه (minify شده) این کتابخانه حدود 60 کیلوبایت است. اگر نیاز به تقویمی غیر از میلادی دارید، باید پلاگین های مربوطه را نیز نصب کنید. برای مثال اگر نیاز به کار کردن با تاریخ شمسی دارید، باید moment-jalali را نیز نصب کنید. حجم این پلاگین حدودا 35 کیلوبایت است که به همراه حجم کتابخانه Moment.js جمعا 95 کیلوبایت می‌شود که حجم قابل ملاحظه ای است.عدم پشتیبانی مناسب از Intl API کتابخانه Moment.js برای Localization و محاسبات مربوط به Time Zone به فایل های اضافه نیاز دارد. این فایل ها اندازه نهایی برنامه شما را ده‌ها کیلوبایت بیشتر می‌کند. برای مثال اگر نیاز به پشتیبانی از Time Zone دارید، باید فایل moment-timezone-with-data-10-year-range.min.js که حجم Minify شده آن حدود 40 کیلوبایت است را به پروژه خود اضافه کنید. با توجه به اینکه Intl API در مرورگرهای امروزی و همچنین Node.js پشتیبانی می‌شود، کتابخانه های جدید، بدون کمک گرفتن از این فایل ها، عملیات Localization و یا محاسبات Time Zone را انجام می‌دهند.آیا نمی‌شود این مشکلات را رفع کرد؟!حتما می‌شود، اما به گفته برنامه نویسان Moment.js، اگر بنا باشد که این تغییرات روی طراحی کتابخانه صورت بگیرد، نسخه جدید این کتابخانه باید مجددا از اول طراحی شود و در آن صورت با نسخه فعلی سازگار (Backward compatible) نخواهد بود. به همین خاطر تصمیم توسعه دهندگان بر این شده که توسعه پروژه را متوقف کنند.Creating a &quot;Moment v3&quot; that was immutable would be a tremendous undertaking and would make Moment a different library entirely. Since this has already been accomplished in other libraries, we feel that it is more important to retain the mutable API.source: https://momentjs.com/docs/#/-project-status/آیا باید همچنان از کتابخانه Moment.js استفاده کنم؟بهتر است استفاده نکنید. این پیشنهاد تیم توسعه دهنده این کتابخانه است.We recognize that many existing projects may continue to use Moment, but we would like to discourage Moment from being used in new projects going forward. Instead, we would like to recommend alternatives that are excellent choices for use in modern applications today.source: https://momentjs.com/docs/#/-project-status/اگر نیازی به تقویم شمسی، هجری-قمری و یا چینی! در پروژه خود ندارید، از Moment استفاده نکنید. اما چالش زمانی شروع می‌شود که نیاز به انجام تبدیلات تقویمی و یا انجام محاسبات در تقویم های شمسی یا قمری دارید. برای مثال می‌خواهید 25 روز شمسی را به تاریخ 1399/12/20 اضافه کنید. در اینصورت احتمالا گزینه های اندکی برای جایگزینی Moment.js دارید!چه گزینه های دیگری دارم؟کتابخانه های جاوا اسکریپتی دیگری هم وجود دارند که محسبات تاریخ را انجام می‌دهند. از جمله:LuxonDay.jsDate-fnsاین کتابخانه ها مشکلات Momemt.js را ندارند، اما همه آنها یک مشکل مشترک دارند: پشتیبانی نکردن از تقویم هایی به غیر از تقویم میلادی. این موضوع برای برنامه هایی که با تاریخ هایی به غیر از میلادی سرو کار دارند موضوع مهمی است. البته کتابخانه Luxon می‌تواند تاریخ میلادی را به سایر تقویم‌ها تبدیل و نمایش دهد اما نمی‌تواند محاسبات تقویمی را در آن تقویم‌ها انجام دهد(برای مثال نمی‌تواند 6 روز را به یک تاریخ شمسی اضافه کند).کتابخانه JS-Sugarواقعیت این است که زبان جاوا اسکریپت در کار کردن با تاریخ ضعیف است! شئ استاندارد Date فقط از تاریخ میلادی پشتیبانی می‌کند. Intl API هنوز به بلوغ نرسیده. البته خوشبختانه این API تبدیلات بین تقویمی (مثلا میلادی به شمسی) را انجام می‌دهد اما محاسباتی مانند جمع و تفریق را انجام نمی‌دهد.کتابخانه JS-Sugar برای رفع این مشکلات طراحی شده است. از ویژگی‌های این کتابخانه می‌توان به موارد زیر اشاره کرد:وابسته نبودن به یک «تقویم» خاص، حتی میلادی (مستقل از تقویم بودن)امکان پیاده سازی تقویم‌های جدید (سه تقویم میلادی، هجری-شمسی و هجری-قمری از قبل پیاده سازی شده اند)پشتیبانی از Time Zoneپشتیبانی از Localizationاستفاده از Intl API برای Localization و محاسبات Time Zone پشتیبانی از Tree-Shakingاندازه کوچکتوسعه پذیر بودن (امکان پیاده سازی تقویم و Locale توسط برنامه‌نویس و منتشر کردن آنها برای استفاده دیگران)در حال حاضر این کتابخانه در حال توسعه است و به زودی نسخه اولیه آن منتشر می‌شود. در مقالات بعدی شما را بیشتر با این کتابخانه آشنا خواهم کرد.مقالاتی که تا کنون در رابطه با کتابخانه جاوااسکریپتی JSS-Date منتشر کرده ایم:بازنشستگی کتابخانه Moment.jsکتابخانه جاوااسکریپت JSS-Date: معرفیکتابخانه جاوااسکریپت JSS-Date: کلاس DateTimeریپازیتوری پروژه (جهت ثبت باگ و درخواست افزودن قابلیت‌های جدید):https://github.com/js-sugar/dateمستندات پروژه:https://js-sugar.github.io/date</description>
                <category>مهرداد</category>
                <author>مهرداد</author>
                <pubDate>Wed, 21 Jul 2021 22:54:42 +0430</pubDate>
            </item>
            </channel>
</rss>