تاریخ و زمان یکی از فیلدهای مهم هر فرم در یک سازمان می باشند. از طرفی با توجه به استفاده از تاریخ شمسی در اکثر سازمان ها و مغایرت آن با تاریخ میلادی یکی از مشکلات توسعه گران نرم افزار استفاده از تاریخ شمسی در فرم های سازمان می باشد. در اینجا به بررسی فیلد تاریخ و زمان در پاورفرم می پردازیم.
در اکثر موارد شما وقتی لایسنس مربوط به پاورفرم را خریداری می کنید شمسی ساز مربوط به پاورفرم را نیز دریافت می کنید.
اگر شما بر روی پاورفرم خود شمسی ساز نصب نکرده اید می توانید با بخش پشتیبانی ما تماس بگیرید.
مثال ۱:
همان طور که می دانید دو نوع کنترل DatePicker و DataTimePicker در پاورفرم وجود دارند. تفاوت این دو فیلد در ارائه ی زمان به صورت ساعت و دقیقه و ثانیه می باشد.
برای نمایش تاریخ جاری به صورت اتوماتیک کافی کد new Date() را در تب Value در قسمت The value calculated by furmola قرار دهید.
با استفاده از کد بالا، هربار پس از باز کردن فرم تاریخ همان روز در فیلد مورد نظر نمایش داده می شود.
مثال ۲:
جهت نمایش زمان و تاریخ در دو فیلد جداگانه و دو ستون جداگانه می توان به روش زیر عمل کرد.
ابتدا در دیزاینر فرم فیلدهایی مشابه تصویر زیر قرار دهید :
سپس در فیلدهای dt_DateTime و dt_Date کد مربوط به تاریخ جاری را قرار دهید.(مانند مثال ۱)
سپس در تب script مربوط به فیلد txt_Time کد زیر را قرار دهید.
var dt=form.GetControl(“dt_DateTime”).GetValue(); var time=dt.split(” “)[1];//substring(11,19); form.GetControl(“txt_Time”).SetValue(time); |
در انتهای کار نمایش فیلد dt_DateTime را غیرفعال کنید که در فرم نمایش داده نشود.
نتیجه ی کار بالا نمایش تاریخ و زمان در دو فیلد مجزا به صورت زیر می باشد:
مثال ۳:
در بعضی مواقع نیاز به ذخیره ی نام فارسی ماه جاری می باشید. برای این کار می توان از روش زیر استفاده کرد.
کنترل هایی مطابق تصویر زیر در دیزاینر فرم قرار دهید.
سپس در قسمت script مربوط به کنترل dt_DateTime کد زیر را قرار دهید:
var dt=form.GetControl(“dt_DateTime”).GetValue(); arry = dt.split(“-“); g_y = parseFloat(arry[0]); g_m = parseFloat(arry[1]); g_d = parseFloat(arry[2]); shdt = gregorian_to_jalali(g_y ,g_m ,g_d) Mdt = get_persian_month(shdt[1]); form.GetControl(“txt_Year”).SetValue(shdt[0]); form.GetControl(“txt_Month”).SetValue(Mdt); form.GetControl(“txt_Day”).SetValue(shdt[2]); |
همان طور که مشاهده می کنید در قسمتی از فرم تابع gregorian_to_jalali فراخوانی شده است. حال باید این تابع را در قسمت اصلی فرم تعریف کنید. برای این کار کافیست کد زیر را در قسمت options در گروه Includes قرار دهید
<script> function div(a, b) { return parseInt((a / b)); }function gregorian_to_jalali(g_y, g_m, g_d) { var g_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var j_days_in_month = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]; var jalali = []; var gy = g_y – 1600; var gm = g_m – 1; var gd = g_d – 1; var g_day_no = 365 * gy + div(gy + 3, 4) – div(gy + 99, 100) + div(gy + 399, 400); for (var i = 0; i < gm; ++i) var j_day_no = g_day_no – 79; var j_np = div(j_day_no, 12053); var jy = 979 + 33 * j_np + 4 * div(j_day_no, 1461); j_day_no %= 1461; if (j_day_no >= 366) { </script> |
بعد از ذخیره فرم می توانید نتیجه ی کار را در فرم اصلی مشاهده کنید: