دلیل ساخت این آموزش در تاپیک زیر اومده (پست 8):
سوال: فیلد محاسباتی در After Update
و بخشی از توضیحات رو در پست شماره 10 همون تاپیک میتونین بخونین.
کدهای این تاپیک ساده شده یک مجموعه نسبتا سنگین و پیچیده کدهای یک کلاس و یک helper بوده
که:
- بخشهای زمان و محاسبات روی اونها کلا کنار گذاشته شده
- روش کبیسه گیری و شمارش روزهای سال کلا از محاسبه به کار با دیتا پیش محاسبه شده تغییر داده شده (برای سادگی و همچنین عدم نیاز در برنامه های متعارف و غیرعلمی)
- محدوده مجاز تاریخ از 1 فروردین 1300 تا 20 اسفند 1420 تعریف شده (که برای کاربردهای عادی کاملا پاسخگو هست)،
- با این وجود دست کاربر برای تغییر این بازه از 1 فروردین 1 تا 30 اسفند 9377 باز هست (فقط با ویرایش چند ثابت و یک array بدون تغییر در کدها)
چیزهایی که باید درنظر داشته باشین:
- تاریخ، به طور کلی و بودن توجه به اینکه ایرانی خورشیدی یا گرگورین یا ماهشمار چینی و ... باشه همیشه یک شماره است (چون همه عملیات روی تاریخ باید با شماره ها انجام بشه) اینجا هم همه در توابع (بدون استثناء) چه خود تاریخ و چه اجزای اون (روز ماه سال) به شکل long تعریف شدن.
- فرمت هایی مانند YYYY/MM/DD فقط برای نمایش هست (گزارش و فرم و ...) و نه محاسبه! پس اگر دیتا شما string و فرمت بندی شده است، باید اون رو به شکل صحیح به توابع پاس کنین (long YYYYMMDD).
- فرصت کنم بعد از تمام شدن تاپیک در مورد اینکه چجوری تابعی بنویسیم که با همه مقادیر پاس شده (string/formatted string/long number) درست کار کنه و خروجی رو هم به همون شکل دریافتی بده.
- مجموعه توابع مستقل و کلا همه کد مورد نیاز در یک module به اسم PersianDateHelper آمده، پس اگر تاریخ ایرانی رو بسادگی با یک مقدار long نشون میدین فقط افزودن همین ماجول به برنامه تون کافی هست.
- یک calss module هم هست به اسم PersianDate که تاریخ ایرانی رو بعنوان object تعریف میکنه و متدها و پراپرتی های اون وابسته به PersianDateHelper هست.
در پست های بعدی فهرست توابع PersianDateHelper و همچنین متدها و پراپرتی های PersianDate رو میارم.