<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های حمیدرضا فلاحی</title><link>https://virgool.ir/feed/@hamidrezafalahi</link><description></description><language>fa</language><pubDate>2026-11-10 18:46:58</pubDate><image><url>https://virgool.ir/images/default-avatar.jpg</url><title>حمیدرضا فلاحی</title><link>https://virgool.ir/@hamidrezafalahi</link></image><item><title>از انتخاب تاریخ ساده تا مقایسه بازه در ERP: معرفی react-persian-range-picker</title><link>https://virgool.ir/@hamidrezafalahi/react-persian-range-picker-j3nafcr0z14h</link><description>اگر روی داشبورد فروش، پنل مالی یا یک ERP واقعی کار کرده باشید، احتمالاً این صحنه برایتان آشناست:«فروش این ماه را با ماه قبل مقایسه کن… حالا یک ماه عقب برو… حالا بازه مقایسه هم باید همزمان عقب برود.»بیشتر Date Pickerهای رایج فقط «یک تاریخ» یا حداکثر «یک بازه» میگیرند. در پروژههای بزرگ سازمانی، مسئله اصلی اغلب چیز دیگری است: مقایسه دو بازه زمانی با تجربه کاربری شبیه ابزارهای enterprise مثل Dynamics / Analytics — و اگر محصول فارسی باشد، همهٔ اینها باید روی تقویم شمسی (جلالی) درست کار کند؛ از جمله سال کبیسه.اینجا است که [react-persian-range-picker](https://www.npmjs.com/package/react-persian-range-picker) معنا پیدا میکند: کتابخانهای سبک برای React که از سادهترین سناریو (یک تاریخ) تا پیچیدهترین (حرکت همزمان بازه + مقایسه) را پوشش میدهد.مشکل واقعی در پروژه های بزرگدر اپلیکیشنهای ERP و BI معمولاً این نیازها همزمان وجود دارند:انتخاب بازه جاری (مثلاً ۱ تا ۳۰ فروردین)تعریف بازه مقایسه (مثلاً همان بازه در ماه قبل یا سال قبل)جابهجایی سریع دوره با دکمههای «یک گام عقب / جلو»پشتیبانی بومی از تقویم شمسی بدون تبدیلهای شکنندهرعایت سال کبیسه جلالی در اعتبارسنجی و محاسبه طول ماهخروجی استاندارد برای API (timestamp یا ISO string)نسخه میلادی برای محصولات دوزبانه (calendarType=&#34;gregorian&#34;)بسیاری از کتابخانههای Jalali فقط تقویم را نمایش میدهند؛ لایهٔ «مقایسه سازمانی + ناوبری همزمان» را خودتان باید از صفر بسازید.این کتابخانه چه تمایزی دارد؟۱) Range Comparison به سبک ابزارهای سازمانیRangePicker برای سناریوی analytics/ERP طراحی شده: بازه اصلی + بازه مقایسه، تبهای Day / Week / Month / Year و انتخاب دستی.۲) ناوبری همزمان بازه و مقایسه (تمایز محصول)یکی از نقاط قوت مهم این پروژه، دکمهٔ حرکت گامی است:با یک کلیک، بازه اصلی یک گام عقب/جلو میرودهمزمان بازه مقایسه هم یک گام متناظر جابهجا میشوداین رفتار برای تحلیل روند در ERP حیاتی است و در تجربهٔ کلاسیک بسیاری از pickerهای عمومی — و حتی الگوهای رایج enterprise — بهصورت آماده کمتر دیده میشود.۳) جلالی محور، نه تبدیل وصله ایموتور تاریخ روی [jalaali-js](https://www.npmjs.com/package/jalaali-js) (الگوریتم Borkowski) بنا شده و برای سال کبیسه و طول ماههای شمسی طراحی شده است؛ نه اینکه فقط روی یک موتور میلادی یک adapter بدلی سوار شود. پشتیبانی میلادی هم از طریق calendarType در دسترس است.۴) مجموعه کامل برای فرم و داشبوردعلاوه بر Range:DatePicker (با ماسک و زمان)Mask کیبوردی YYYY/MM/DD با فوکوس سگمنت (سال → ماه → روز)TimePickerCalendar قابلembedهوکهای useRenderPosition و useMediaQueryتوابع formatExport / formatIDateExport۵) سبک برای productionوابستگی runtime تاریخ فقط jalaali-js است و React بهصورت peer dependency مصرف میشود — مناسب bundleهای سازمانی که از سنگینشدن پکیجها حساساند. بدون نیاز به moment-jalaali.نصب و شروع سریعnpm i react-persian-range-picker&#xA;# یا&#xA;yarn add react-persian-range-pickerPeer dependencies: react و react-dom (نسخه ۱۷ / ۱۸ / ۱۹).مثال ۱ — DatePicker ساده (سطح ۱)import { useState } from &#39;react&#39;;&#xA;import { DatePicker } from &#39;react-persian-range-picker&#39;;&#xA;import type { DatePickerValue } from &#39;react-persian-range-picker&#39;;&#xA;&#xA;export function InvoiceDateField() {&#xA;  const [value, setValue] = useState&lt;DatePickerValue&gt;(null);&#xA;&#xA;  return (&#xA;    &lt;DatePicker&#xA;      calendarType=&#34;jalali&#34;&#xA;      exportType=&#34;timeStamp&#34;&#xA;      showMask&#xA;      allowClear&#xA;      value={value}&#xA;      ={setValue}&#xA;      primaryColor=&#34;#1c39bb&#34;&#xA;    /&gt;&#xA;  );&#xA;}مثال ۲ — Mask مستقل (سطح ۲)import { Mask } from &#39;react-persian-range-picker&#39;;&#xA;&#xA;&lt;Mask&#xA;  calendarType=&#34;jalali&#34;&#xA;  exportType=&#34;IsoString&#34;&#xA;  allowClear&#xA;  maskPlaceHolder=&#34;____/__/__&#34;&#xA;  onMaskChange={(v) =&gt; console.log(v)}&#xA;  ={(msg) =&gt; console.warn(msg)}&#xA;/&gt;مثال ۳ — TimePicker (سطح ۳)import { TimePicker } from &#39;react-persian-range-picker&#39;;&#xA;&#xA;&lt;TimePicker&#xA;  exportType=&#34;timeStamp&#34;&#xA;  showSecond&#xA;  showNow&#xA;  minuteStep={5}&#xA;  ={(v) =&gt; console.log(v)}&#xA;/&gt;مثال ۴ — Range + Comparison + ناوبری (سطح ۵ و ۶)import { useState } from &#39;react&#39;;&#xA;import { RangePicker } from &#39;react-persian-range-picker&#39;;&#xA;import type { HandleParams, IDate } from &#39;react-persian-range-picker&#39;;&#xA;&#xA;export function SalesFilter() {&#xA;  const [range, setRange] = useState&lt;IDate | null&gt;(null);&#xA;&#xA;  return (&#xA;    &lt;RangePicker&#xA;      calendarType=&#34;jalali&#34;&#xA;      exportType=&#34;timeStamp&#34;&#xA;      showComparison&#xA;      isShowNavigationButton&#xA;      value={range ?? undefined}&#xA;      ={(e: HandleParams) =&gt; {&#xA;        const date = e.Data?.date as IDate | undefined;&#xA;        if (date) setRange(date);&#xA;      }}&#xA;      onCompareDateChange={(e) =&gt; {&#xA;        console.log(&#39;compare&#39;, e.Data);&#xA;      }}&#xA;      ={(e) =&gt; console.log(&#39;submit&#39;, e)}&#xA;      primaryColor=&#34;#1c39bb&#34;&#xA;    /&gt;&#xA;  );&#xA;}چه زمانی این کتابخانه انتخاب درستی است؟انتخاب کنید اگر:داشبورد/ERP دارید و مقایسه بازه بخشی از UX اصلی استتقویم شمسی باید first-class باشد (نه adapter فرعی)میخواهید ناوبری دوره روی بازه + مقایسه همزمان کار کندمحصولات دوزبانه دارید و گاهی به Gregorian هم نیاز استنمیخواهید فقط برای تاریخ، کل Ant Design یا MUI را به پروژه تحمیل کنیدسوالات متداولآیا سال کبیسه شمسی پشتیبانی میشود؟بله. موتور روی jalaali-js است و اعتبارسنجی ماسک/تقویم با آگاهی از کبیسه انجام میشود.آیا فقط شمسی است؟خیر. با calendarType=&#34;gregorian&#34; میتوانید میلادی کار کنید.React 19؟بله؛ peer برای React ۱۷ / ۱۸ / ۱۹ تعریف شده است.TypeScript؟بله؛ تایپها در پکیج منتشر میشوند.لینکهادمو زنده: GitHub Pagesnpm: react-persian-range-pickerGitHub: Persian-range-pickerنویسنده: Hamidreza Fallahiجمع بندیreact-persian-range-picker فقط «یک تقویم شمسی دیگر» نیست؛ یک جعبه ابزار زمانی برای React است: از DatePicker و Mask تا Range Comparison و ناوبری همزمان بازه/مقایسه — با موتور جلالی واقعی، پشتیبانی میلادی، و footprint سبک برای production.اگر روی محصول فارسی زبان سازمانی کار میکنید، یکبار دمو را با showComparison و دکمه های ناوبری امتحان کنید — همان جایی است که تفاوت را حس میکنید.npm i react-persian-range-picker</description><category>حمیدرضا فلاحی</category><author>حمیدرضا فلاحی</author><pubDate>Sat, 01 Aug 2026 16:56:33 +0330</pubDate></item></channel></rss>