پرش به مطلب اصلی

متغیرهای سیستمی

متغیرهای سیستمی، مقدارهای آماده‌ای هستند که اپ ادیتور به‌صورت خودکار در اختیار اپلیکیشن قرار می‌دهد. این متغیرها معمولاً فقط‌خواندنی هستند و می‌توانید از آن‌ها در شرط‌ها، عملکردها، نمایش متن و منطق صفحات استفاده کنید.

همه متغیرهای سیستمی با پیشوند sys.‎ شروع می‌شوند. این پیشوند نشان می‌دهد مقدار توسط سیستم ساخته شده و نباید به‌عنوان متغیر کاربری تعریف یا بازنویسی شود.

نکات مهم

  • متغیرهای سیستمی نیازی به ساخت دستی ندارند.
  • مقدار آن‌ها توسط سیستم و در زمان اجرا به‌روزرسانی می‌شود.
  • برای استفاده، نام کامل متغیر را دقیقاً مطابق جدول‌ها وارد کنید.

اطلاعات اپ

ناممتغیرتوضیح
نام اپsys.app.nameنام برنامه
پکیج اپsys.app.packageNameشناسه پکیج برنامه
نام نسخهsys.app.versionNameنام نسخه برنامه، مانند 1.2.0
نسخه عددیsys.app.versionCodeکد نسخه برنامه
وب بودنsys.app.isWebآیا برنامه روی وب اجرا شده است

پلتفرم

ناممتغیرتوضیح
اندروید بودنsys.platform.isAndroidآیا دستگاه اندروید است
iOS بودنsys.platform.isIOSآیا دستگاه iOS است
ویندوز بودنsys.platform.isWindowsآیا دستگاه ویندوز است
لینوکس بودنsys.platform.isLinuxآیا دستگاه لینوکس است
مک بودنsys.platform.isMacOSآیا دستگاه مک است
دسکتاپ بودنsys.platform.isDesktopآیا اپ روی دسکتاپ (ویندوز/مک/لینوکس) اجرا شده است

تایمر

ناممتغیرتوضیح
تیک تایمرsys.timer.tickشمارنده تیک تایمر سراسری (هر ثانیه)

وضعیت اجرا

ناممتغیرتوضیح
دسترسی اینترنتsys.runtime.hasInternetAccessدسترسی واقعی به اینترنت
روشنایی سیستمsys.runtime.brightnessحالت روشنایی سیستم (light/dark)
اولین اجراsys.runtime.isFirstLaunchآیا اولین اجرا بعد از نصب یا آپدیت است؟
نصب جدیدsys.runtime.isNewInstallationآیا نصب تازه انجام شده است.
زبان جاریsys.runtime.currentLangIdشناسه زبان فعلی اپ

تم فعال اپ

ناممتغیرتوضیح
تم فعالsys.theme.currentتمی که اکنون داخل اپ فعال است؛ مقدار آن light یا dark است

متغیر sys.theme.current وضعیت واقعی تم اپ را نشان می‌دهد و بعد از اجرای عملکرد «تغییر تم» نیز بلافاصله به‌روزرسانی می‌شود:

sys.theme.current == "dark"

از این شرط می‌توانید برای نمایش محتوای مخصوص تم تاریک، انتخاب تصویر مناسب یا اجرای عملکرد‌های متفاوت استفاده کنید.

تفاوت تم اپ با روشنایی سیستم

sys.theme.current تم فعال خود اپ است؛ اما sys.runtime.brightness روشنایی تنظیم‌شده در سیستم‌عامل دستگاه را نشان می‌دهد. این دو مقدار ممکن است با هم متفاوت باشند، زیرا تم اپ می‌تواند مستقل از تنظیم دستگاه روی روشن یا تاریک قرار گیرد.

اندازه و جهت صفحه

ناممتغیرتوضیح
جهت صفحهsys.metrics.orientationجهت فعلی صفحه (portrait/landscape)
حالت پرترهsys.metrics.isPortraitآیا جهت صفحه portrait است
حالت افقیsys.metrics.isLandscapeآیا جهت صفحه landscape است
عرضsys.metrics.widthعرض فعلی صفحه (logical)
ارتفاعsys.metrics.heightارتفاع فعلی صفحه (logical)
نسبت تصویرsys.metrics.aspectRatioنسبت ابعاد صفحه
چگالی پیکسلsys.metrics.devicePixelRatiodevicePixelRatio فعلی
عرض منطقیsys.metrics.logicalWidthعرض منطقی viewport
ارتفاع منطقیsys.metrics.logicalHeightارتفاع منطقی viewport
عرض فیزیکیsys.metrics.physicalWidthعرض فیزیکی viewport
ارتفاع فیزیکیsys.metrics.physicalHeightارتفاع فیزیکی viewport

صفحه

ناممتغیرتوضیح
شناسه صفحه جاریsys.page.currentIdشناسه صفحه فعال فعلی
شناسه صفحه قبلیsys.page.previousIdشناسه صفحه قبلی در ناوبری
شناسه صفحه در حال اجراsys.inPage.pageIdشناسه صفحه‌ای که متغیر در context آن ارزیابی می‌شود
داده صفحه در حال اجراsys.inPage.dataداده پویای ارسال‌شده یا وابسته به همان صفحه؛ مسیرهای فرزند نیز قابل استفاده‌اند
اطلاعات صفحه بسته‌شدهsys.exitedPage.*داده‌های آخرین صفحه‌ای که بسته شده است؛ برای استفاده در رویداد «خروج از صفحه»

متغیرهای وابسته به صفحه در حال اجرا

متغیرهای sys.inPage.pageId و sys.inPage.data از context همان صفحه‌ای خوانده می‌شوند که متن، شرط، ویجت یا عملکرد داخل آن ارزیابی شده است. این رفتار در صفحه‌های توکار و ساختارهای تودرتو اهمیت دارد، زیرا مقدار به صفحه مالک وابسته است و صرفاً آخرین صفحه ثبت‌شده در ناوبری را نشان نمی‌دهد.

شناسه صفحه

متغیر sys.inPage.pageId یک عدد و برابر شناسه همان صفحه است. برای مثال می‌توانید شناسه صفحه را در متن نمایش دهید:

شناسه این صفحه: {{sys.inPage.pageId}}

یا در یک شرط، اجرای عملکرد را به صفحه مشخصی محدود کنید:

sys.inPage.pageId == 62856

داده صفحه

متغیر sys.inPage.data داده پویایی را برمی‌گرداند که هنگام باز شدن یا ساخت صفحه به آن ارسال شده است. مقدار آن می‌تواند یک آبجکت JSON، آرایه یا null باشد. برای دسترسی به فیلدهای داخلی، مسیر فیلد را بعد از نام متغیر بنویسید:

sys.inPage.data.title
sys.inPage.data.product.name
sys.inPage.data.items[0].name

برای مثال در یک متن می‌توانید بنویسید:

عنوان: {{sys.inPage.data.title}}

اگر داده‌ای به صفحه ارسال نشده باشد یا مسیر مورد نظر در داده وجود نداشته باشد، مقدار آن null است و هنگام جایگذاری در متن به رشته خالی تبدیل می‌شود.

تفاوت با sys.page.currentId

sys.page.currentId شناسه صفحه فعال در مسیر ناوبری اپ را نگه می‌دارد؛ اما sys.inPage.pageId شناسه صفحه‌ای است که متغیر در context آن خوانده می‌شود. در یک صفحه معمولی این دو اغلب برابرند، ولی در صفحه‌های توکار یا ساختارهای تودرتو ممکن است متفاوت باشند.

اطلاعات صفحه بسته‌شده

رویداد «خروج از صفحه» بعد از بسته شدن صفحه اجرا می‌شود؛ یعنی در آن لحظه sys.inPage.* به صفحه مقصد اشاره می‌کند، نه صفحه‌ای که بسته شده است. برای دسترسی به داده‌های صفحه بسته‌شده از sys.exitedPage.* استفاده کنید:

متغیرتوضیح
sys.exitedPage.pageIdشناسه صفحه‌ای که بسته شده است
sys.exitedPage.isHomeآیا صفحه بسته‌شده صفحه اصلی بوده است
sys.exitedPage.dataداده پویای صفحه بسته‌شده؛ مسیرهای فرزند مانند sys.exitedPage.data.title هم کار می‌کنند
sys.exitedPage.entityموجودیت (محصول، نوشته و ...) متصل به صفحه بسته‌شده؛ مثل sys.exitedPage.entity.id، sys.exitedPage.entity.kind و sys.exitedPage.entity.title
sys.exitedPage.productاطلاعات محصول صفحه بسته‌شده
sys.exitedPage.feedbackاطلاعات نظر و امتیاز صفحه بسته‌شده
sys.exitedPage.optionSelectorمقدار انتخاب‌گر گزینه‌های صفحه بسته‌شده

ساختار این متغیرها دقیقاً مثل sys.inPage.* است؛ فقط به‌جای صفحه جاری، عکس فوری صفحه‌ای را نگه می‌دارد که همین الان بسته شده است.

برای مثال، در رویداد «خروج از صفحه» می‌توانید فقط وقتی صفحه قبلی را تازه‌سازی کنید که کاربر از صفحه محصول برگشته باشد:

sys.exitedPage.entity.kind == product
یادداشت

مقدار این متغیرها تا بسته شدن صفحه بعدی باقی می‌ماند و خواندن آن‌ها خارج از رویداد «خروج از صفحه» معمولاً معنایی ندارد.

اعلان و یادآوری

ناممتغیرتوضیح
اعلان جاریsys.notification.currentعنوان، متن، صفحه مقصد و اطلاعات اعلانی که کاربر باز کرده است
اپ از اعلان باز شده استsys.notification.openedپس از لمس اعلان مقدار true می‌گیرد
کلید آخرین اعلانsys.notification.keyکلید آخرین اعلان نمایش‌داده‌شده، ثبت‌شده یا لغوشده
داده آخرین اعلانsys.notification.data«داده همراه» اعلانی که کاربر باز کرده است
موفقیت آخرین عملیات اعلانsys.notification.successنتیجه نمایش، ثبت یا لغو آخرین اعلان محلی
خطای آخرین عملیات اعلانsys.notification.errorمتن خطای آخرین عملیات اعلان محلی
شناسه عددی آخرین اعلانsys.notification.idشناسه داخلی تولیدشده از کلید اعلان
یادآوری‌های فعالsys.notification.remindersفهرست یادآوری‌های ثبت‌شده که هنوز اجرا یا لغو نشده‌اند

این متغیرها با عملکردهای نمایش نوتیفیکیشن محلی، ثبت یادآوری، لغو یادآوری و لغو همه یادآوری‌ها مقداردهی می‌شوند.

بررسی نتیجه عملیات

بعد از هر یک از عملکردهای بالا می‌توانید موفقیت آن را بررسی کنید:

sys.notification.success == true

و در صورت خطا، متن آن را نمایش دهید:

{{sys.notification.error}}

واکنش به باز شدن اپ از اعلان

اگر کاربر با لمس اعلان وارد اپ شود، مقدار sys.notification.opened برابر true می‌شود و می‌توانید بر اساس آن رفتار متفاوتی اجرا کنید:

sys.notification.opened == true

مقدار همراه اعلان نیز از sys.notification.data و کلید آن از sys.notification.key قابل خواندن است.

فهرست یادآوری‌های فعال

متغیر sys.notification.reminders آرایه‌ای از یادآوری‌هایی است که در سیستم‌عامل ثبت شده‌اند و هنوز نه اجرا شده‌اند و نه لغو. این فهرست هنگام اجرای اپ و پس از هر ثبت یا لغو موفق، به‌روزرسانی می‌شود. اگر یادآوری فعالی وجود نداشته باشد، مقدار آن یک آرایه خالی ([]) است.

فیلدهای هر یادآوری

فیلدنوعتوضیح
keyمتنکلید یکتایی که هنگام ثبت یادآوری وارد شده است
idعددشناسه داخلی ساخته‌شده از کلید
titleمتنعنوان اعلان
bodyمتنمتن اعلان
repeatمتننوع تکرار: none، daily یا weekly
exactبولیآیا زمان‌بندی دقیق فعال است
atعددزمان اولین اجرا بر حسب epoch milliseconds
pageعددشناسه صفحه‌ای که با لمس اعلان باز می‌شود (در صورت تعیین)
dataمتنداده همراه اعلان (در صورت تعیین)

تعداد یادآوری‌های فعال:

sys.notification.reminders._length

دسترسی به یک یادآوری مشخص، با شماره‌گذاری از صفر:

sys.notification.reminders[0].key
sys.notification.reminders[0].title
sys.notification.reminders[0].repeat

برای نمایش همه یادآوری‌ها، sys.notification.reminders را به‌عنوان منبع داده یک لیست پویا استفاده کنید و روی دکمه حذف هر آیتم، عملکرد «لغو یادآوری» را با فیلد key همان آیتم تنظیم کنید.

تفاوت اعلان محلی با سرویس نوتیفیکیشن

این متغیرها مربوط به اعلان‌های محلی هستند که خود اپ می‌سازد و به اینترنت نیاز ندارند. برای ارسال نوتیفیکیشن از پنل یا سرور، به سرویس نوتیفیکیشن مراجعه کنید. متغیر sys.notification.current در هر دو حالت مقدار می‌گیرد.

محدودیت پلتفرم

اعلان محلی و یادآوری در نسخه فعلی فقط روی Android و iOS پشتیبانی می‌شوند. در خروجی وب و دسکتاپ، sys.notification.success مقدار false می‌گیرد و دلیل آن در sys.notification.error قرار می‌گیرد.

کاربر

ناممتغیرتوضیح
ورود کاربرsys.user.isLoggedInآیا کاربر وارد حساب شده است
شناسه کاربرsys.user.idشناسه کاربر فعلی
تکمیل پروفایلsys.user.profileIsCompleteوضعیت کامل بودن پروفایل کاربر
نام کاربرsys.user.nameنام کاربر
نام خانوادگیsys.user.lastnameنام خانوادگی کاربر
موبایلsys.user.mobileشماره موبایل کاربر
ایمیلsys.user.emailایمیل کاربر
خریدهای فعالsys.user.buysفهرست خریدها و دسترسی‌های فعال کاربر

خریدها و اشتراک‌های فعال

متغیر sys.user.buys یک آرایه از خریدها و دسترسی‌هایی است که در حال حاضر معتبر هستند. این متغیر تاریخچه خرید نیست؛ خریدها و اشتراک‌های منقضی‌شده در آن قرار نمی‌گیرند. اگر کاربر هیچ خرید فعالی نداشته باشد، مقدار آن یک آرایه خالی ([]) است.

تعداد خریدهای فعال را می‌توانید با مسیر زیر دریافت کنید:

sys.user.buys._length

برای دسترسی به یک خرید مشخص، از شماره آن در آرایه استفاده کنید. شماره‌گذاری از صفر شروع می‌شود:

sys.user.buys[0].name
sys.user.buys[0].code
sys.user.buys[0].isPermanent
sys.user.buys[0].remainingDays

نوشتن شماره آیتم با نقطه نیز پشتیبانی می‌شود؛ برای مثال sys.user.buys.0.name با sys.user.buys[0].name یکسان است.

فیلدهای هر خرید

فیلدنوعتوضیح
idعددشناسه محصول خریدنی؛ با itemId برابر است
itemIdعددشناسه محصول خریدنی در اپ ادیتور
codeمتنکد یا SKU محصول
nameمتننام محصول
descriptionمتنتوضیحات محصول
sourceمتنمنبع اعتبار دسترسی؛ server یا شناسه مارکت مانند bazaar و myket
paymentSourceمتن یا nullروش ثبت پرداخت در خریدهای سروری، مانند gateway، bazaar یا myket. ممکن است در خرید مستقیم مارکت وجود نداشته باشد
isActiveبولیبرای آیتم‌های داخل این فهرست همیشه true است
isSubscriptionبولیآیا دسترسی زمان‌دار و سمت سرور است؟
typeمتننوع دسترسی: purchase برای خرید دائمی و subscription برای دسترسی زمان‌دار
durationTypeمتننوع مدت اعتبار: permanent یا expiring
isPermanentبولیآیا خرید بدون تاریخ انقضا است؟
purchasedAtمتن یا nullتاریخ خرید به فرمت ISO-8601؛ تا زمان دریافت اطلاعات معتبر ممکن است null باشد
purchasedAtJalaliمتن یا nullمعادل شمسی تاریخ خرید به فرمت yyyy/mm/dd HH:mm
expiresAtمتن یا nullتاریخ انقضا به فرمت ISO-8601؛ برای خرید دائمی null است
expiresAtJalaliمتن یا nullمعادل شمسی تاریخ انقضا به فرمت yyyy/mm/dd HH:mm؛ برای خرید دائمی null است
remainingSecondsعدد یا nullتعداد ثانیه باقی‌مانده تا انقضا؛ برای خرید دائمی null است
remainingDaysعدد یا nullتعداد روز باقی‌مانده با گرد کردن رو به بالا؛ برای خرید دائمی null است
expirationKnownبولیآیا دائمی بودن یا تاریخ انقضای دسترسی به‌صورت قطعی مشخص شده است؟

نمونه خرید دائمی

{
"id": 12,
"itemId": 12,
"code": "remove_ads",
"name": "حذف تبلیغات",
"description": "حذف دائمی تبلیغات برنامه",
"source": "bazaar",
"isActive": true,
"isSubscription": false,
"type": "purchase",
"durationType": "permanent",
"isPermanent": true,
"purchasedAt": "2026-07-27T10:20:00.000Z",
"purchasedAtJalali": "1405/05/05 13:50",
"expiresAt": null,
"expiresAtJalali": null,
"remainingSeconds": null,
"remainingDays": null,
"expirationKnown": true
}

نمونه دسترسی زمان‌دار

{
"id": 18,
"itemId": 18,
"code": "gold_30_days",
"name": "دسترسی طلایی ۳۰ روزه",
"description": "دسترسی به تمام محتوای طلایی",
"source": "server",
"paymentSource": "bazaar",
"isActive": true,
"isSubscription": true,
"type": "subscription",
"durationType": "expiring",
"isPermanent": false,
"purchasedAt": "2026-07-01T10:20:00+03:30",
"purchasedAtJalali": "1405/04/10 10:20",
"expiresAt": "2026-07-31T10:20:00+03:30",
"expiresAtJalali": "1405/05/09 10:20",
"remainingSeconds": 345600,
"remainingDays": 4,
"expirationKnown": true
}

مقادیر شمسی بر اساس منطقه زمانی دستگاه کاربر ساخته می‌شوند. مقدار remainingDays نیز روز ناقص را یک روز حساب می‌کند؛ برای مثال اگر ۲ ساعت از اعتبار باقی مانده باشد، مقدار آن 1 خواهد بود. زمان باقی‌مانده هنگام اجرای اپ به‌روز می‌شود و پس از رسیدن زمان انقضا، آیتم به‌صورت خودکار از sys.user.buys حذف خواهد شد.

تفاوت روش‌های پرداخت

حالت پرداختنیاز به ورودمنبع اطلاعاتنوع دسترسی قابل نمایش
درگاه مستقلداردسروردائمی یا زمان‌دار
مارکت با همگام‌سازی فعالداردسروردائمی یا زمان‌دار
مارکت با همگام‌سازی غیرفعالنداردموجودی حساب مارکتفقط دائمی

در حالت مارکت مستقیم، محصول باید از نوع عادی و غیر اشتراکی باشد. اشتراک زمان‌دار مارکت پشتیبانی نمی‌شود و دسترسی زمان‌دار فقط سمت سرور مدیریت می‌شود.

نمونه استفاده در شرط‌ها

بررسی وجود حداقل یک خرید فعال:

sys.user.buys._length > 0

بررسی دائمی بودن اولین خرید:

sys.user.buys[0].isPermanent == true

بررسی نزدیک بودن انقضای اولین دسترسی زمان‌دار:

sys.user.buys[0].isSubscription == true
sys.user.buys[0].remainingDays <= 3

برای نمایش همه خریدها، sys.user.buys را به‌عنوان منبع داده یک لیست پویا استفاده کنید و فیلدهایی مانند name، purchasedAtJalali، expiresAtJalali و remainingDays را در آیتم لیست نمایش دهید.

زبان و منطقه زمانی

ناممتغیرتوضیح
تگ زبانsys.locale.tagتگ کامل locale سیستم
کد زبانsys.locale.languageCodeکد زبان سیستم
کد کشورsys.locale.countryCodeکد کشور locale
نام منطقه زمانیsys.timezone.nameنام timezone سیستم
آفست منطقه زمانیsys.timezone.offsetاختلاف timezone به فرمت +HH:mm
آفست دقیقه‌ایsys.timezone.offsetMinutesاختلاف timezone بر حسب دقیقه

تاریخ و زمان

ناممتغیرتوضیح
یونیکس میلی‌ثانیهsys.datetime.epochMsزمان جاری بر حسب epoch milliseconds
یونیکس ثانیهsys.datetime.epochSecزمان جاری بر حسب epoch seconds
ISO محلیsys.datetime.isoLocalتاریخ‌زمان محلی با ISO-8601
ISO UTCsys.datetime.isoUtcتاریخ‌زمان UTC با ISO-8601
RFC3339 محلیsys.datetime.rfc3339Localتاریخ‌زمان محلی با فرمت RFC3339
تاریخ‌زمان کامل /sys.datetime.yyyy_mm_dd_hh_mmتاریخ‌زمان میلادی تا دقیقه
تاریخ‌زمان کامل / ثانیهsys.datetime.yyyy_mm_dd_hh_mm_ssتاریخ‌زمان میلادی تا ثانیه
تاریخ‌زمان کامل -sys.datetime.yyyy-mm-dd_hh:mm:ssتاریخ‌زمان میلادی با جداکننده - و :

تاریخ میلادی

ناممتغیرتوضیح
سال میلادیsys.date.gregorian.yearسال میلادی جاری
ماه میلادیsys.date.gregorian.monthماه میلادی جاری
روز میلادیsys.date.gregorian.dayروز میلادی جاری
روز هفته میلادیsys.date.gregorian.weekdayروز هفته میلادی (1..7)
روز سال میلادیsys.date.gregorian.dayOfYearشماره روز در سال میلادی
هفته ISOsys.date.gregorian.isoWeekشماره هفته به استاندارد ISO
تاریخ میلادی /sys.date.gregorian.yyyy_mm_ddتاریخ میلادی با /
تاریخ میلادی -sys.date.gregorian.yyyy-mm-ddتاریخ میلادی با -

تاریخ شمسی

ناممتغیرتوضیح
سال شمسیsys.date.jalali.yearسال شمسی جاری
ماه شمسیsys.date.jalali.monthماه شمسی جاری
روز شمسیsys.date.jalali.dayروز شمسی جاری
تاریخ شمسی کاملsys.date.jalali.fullتاریخ شمسی به فرمت yyyy/mm/dd
روز هفته شمسیsys.date.jalali.weekdayشماره روز هفته شمسی
نام ماه شمسیsys.date.jalali.monthNameنام ماه شمسی
نام روز هفته شمسیsys.date.jalali.weekdayNameنام روز هفته شمسی

بخش‌های تاریخ

ناممتغیرتوضیح
سال چهاررقمیsys.date.parts.yyyyسال به صورت 4 رقمی
سال دورقمیsys.date.parts.yyسال به صورت 2 رقمی
ماه دورقمیsys.date.parts.mmماه به صورت 2 رقمی
روز دورقمیsys.date.parts.ddروز به صورت 2 رقمی

زمان

ناممتغیرتوضیح
ساعتsys.time.hourساعت جاری
دقیقهsys.time.minuteدقیقه جاری
ثانیهsys.time.secondثانیه جاری
میلی‌ثانیهsys.time.millisecondمیلی‌ثانیه جاری
زمان HH:mmsys.time.hh_mmزمان به فرمت HH:mm
زمان HH:mm:sssys.time.hh_mm_ssزمان به فرمت HH:mm:ss

فرمت محلی

ناممتغیرتوضیح
تاریخ کامل محلیsys.intl.date.fullتاریخ کامل براساس locale دستگاه
تاریخ کوتاه محلیsys.intl.date.shortتاریخ کوتاه براساس locale دستگاه
زمان محلیsys.intl.timeزمان براساس locale دستگاه

نمونه استفاده

  • برای نمایش نام کاربر، از sys.user.name در متن یا ویجت نمایشگر متغیر استفاده کنید.
  • برای نمایش دکمه ورود فقط به کاربران واردنشده، شرط را بر اساس sys.user.isLoggedIn تنظیم کنید.
  • برای اجرای رفتار متفاوت در وب و اندروید، از sys.app.isWeb یا sys.platform.isAndroid استفاده کنید.
  • برای تشخیص تم فعال اپ، از sys.theme.current استفاده کنید.
  • برای نمایش یادآوری‌های ثبت‌شده کاربر، از sys.notification.reminders در یک لیست پویا استفاده کنید.
  • برای نمایش تاریخ شمسی امروز، از sys.date.jalali.full استفاده کنید.

ادامه مسیر