Logo for Parsclick

پلاگین تاریخ شمسی در لاراول

  June 5, 2017 at 1:24 PM
  ۱۵ خرداد، ۱۳۹۶ ساعت ۱۳:۲۴

پلاگین تاریخ شمسی در لاراول

برنامه نویسان فارسی زبان برای استفاده از تاریخ شمسی از الگوریتم تبدیل تاریخ میلادی به شمسی استفاده می کنند. برای زبان php و فریم ورک لاراول این الگوریتم به صورت پکیج وجود دارد. Verta یک پکیج برای تبدیلات تاریخ شمسی به میلادی و بالعکس می باشد و شامل توابع کمکی که کاربران به راحتی بتوانند تبدیلات تاریخ خود را انجام دهند.

زبان php دارای کلاسی به نام Datetime است که Verta از همین کلاس ارث بری کرده است. دقت داشته باشید این پکیج سازگار با نسخه 5 لاراول می باشد.

پکیج قدرتمند carbon یکی از پکیج های پیش فرض لاراول است که برای کار با تاریخ میلادی بسیار کاربردی است. Verta با هدف ارايه توابع و امکاناتی همچون carbon سعی در کمک به برنامه نویسان فارسی زبان دارد.

نصب

برای استفاده از این پکیج باید ابتدا پکیج را دریافت و نصب کنید برای این کار از دستور زیر را وارد کنید:


composer require hekmatinasser/verta

حال باید پکیج را درون پروژه خود ثبت کنید برای این کار فایل config/app.php در آرایه providers دستور زیر را وارد کنید:


Hekmatinasser\Verta\VertaServiceProvider::class,

سپس در آرایه alias دستور زیر را وارد کنید:


'Verta' = Hekmatinasser\Verta\Verta::class,

حالا میتوانید از این پکیج در پروژه خود استفاده کنید. حال با نحوه استفاده از پکیج و توابع آن معرفی خواهیم کرد:

هر کلاسی که از verta استفاده میکنید باید در بالای کد های خود کلاس verta را اضافه کنید، دستور زیر را وارد کنید:

use Verta;

توابع Verta در دسته بندی های مجزا تقسیم شده است و هر دسته بندی اعمال خاصی بر روی تاریخ را انجام خواهند داد.

توابع ایجاد تاریخ

شما میتوانید کلاس Verta بدین صورت ایجاد کنید:


$v = verta();
$v = new Verta();
$v = Verta::now(); //1396-02-02 15:32:08
$v = Verta::today(); //1396-03-02 00:00:00
$v = Verta::tomorrow(); // 1396-03-03 00:00:00
$v = Verta::yesterday(); // 1396-03-01 00:00:00

در صورتی که پارامتر شما رشته از سال میلادی است از دستور زیر استفاده کنید:


$v = new Verta('2016-12-27 14:12:32');
$v = Verta::instance('2016-12-25 11:12:36');

ارسال پارامتر timestamp


$v = new Verta(1333857600);

ارسال پارامتر carbon


$c = \Carbon::now();
return new Verta($c); // 1395-12-09 15:05:56

در صورتی که پارامتر شما تاریخ شمسی میباشد از دستور زیر استفاده کنید:


$v = Verta::parse('1395-10-07 14:12:32');

اگر پارامتر های تاریخ شما به صورت مجزا باشد تابع create برای شما این کار را انجام خواهد داد. تابع create پارامتر هایی که از شما دریافت نمیشود با تاریخ و زمان فعلی پر میکند.


return Verta::create(2016,12,25,15,20,15);

شما میتوانید بخشی از تاریخ و زمان را نیز ارسال کنید


return Verta::createDate(2016,12,25);
return Verta::createTime(15,51,5);

تابع createGregorian مانند تابع create تاریخ میلادی را دریافت می کند.


return Verta::createGregorian(2016,12,25,15,20,15); // 1395-10-05 15:20:15
return Verta::createGregorianDate(2016,12,25); // 1395-10-05 21:35:49 set time now
return Verta::createGregorianTime(15,51,5); // 1396-02-31 15:51:05 set date now

در صورتی که پارامتر ها تاریخ شمسی استفاده می کنید از توابع createJalali استفاده کنید.


return Verta::createJalali(1394,12,29,15,51,5);  // 1394-12-29 15:51:05
return Verta::createJalaliDate(1394,12,29); // 1394-12-29 11:18:29 set time now
return Verta::createJalaliTime(15,51,5); // 1395-12-14 15:51:05 set date now

get and set

یکی از قابلیتها خوب دسترسی به هر خصوصیت از تاریخ میباشد. شما میتوانید سال و ... به صورت یک خصوصیت دریافت کنید.


$v = verta();
return $v->year; // 1396
return $v->month; // 3
return $v->day; // 14
return $v->hour; // 14
return $v->minute; // 18
return $v->second; // 23
return $v->timestamp; // 1496557661
return $v->timezone; // Asia/Tehran

میتوانید مقدار هر یک از قسمتهای تاریخ را نیز مقداردهی کنید. شما هم به صورت مقداردهی به یک خصوصیت و هم به صورت یک متد میتوانید این کار را انجام دهید.


$v = verta();
$v->year = 1395;
$v->month = 4; // set 13 for next year first month
$v->day = 25;
$v->hour = 16;
$v->minute = 50;
$v->second = 42;
$v->timestamp = 1496557661;
$v->timezone = 'Asia/Baku';

$v = $v->year(1395)
$v = $v->month(4) // set 13 for next year first month
$v = $v->day(25)
$v = $v->hour(16)
$v = $v->minute(50)
$v = $v->second(42)
$v = $v->timestamp(1496557661)
$v = $v->timezone('Asia/Baku');

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


$v = $v->setDateTime(1395, 4, 25, 16, 50, 42);
$v = $v->setDateTime(1395, 4, 25, 16, 50, 42, 1569856);
$v = $v->setDate(1395, 4, 25);
$v = $v->setTimeString('12:25:48');

در صورتی که وجود هر یک مقادیر را میخواهید بررسی کنید از تابع isset استفاده کنید.


$v = verta();
echo isset($v->year); // true
echo isset($v->month); // true
echo empty($v->day); // false
echo empty($v->hour); // false
echo empty($v->minute); // false
echo empty($v->second); // false
echo isset($v->timestamp); // true
echo isset($v->timezone); // true

توابع فرم خروجی


زمانی که میخواهید تاریخ خود را چاپ کنید تابع format به شما این امکان را میدهد هر بخشی از تاریخ خود را مشاهده کنید. وقتی شی از کلاس Verta را return میکنید به صورت پیشفرض فرمت را خروجی می دهد.


return new Verta(); // 1395-12-12 00:18:04

شما میتوانید فرمت خروجی هنگام که return را مشخص کنید:


Verta::setStringformat('Y/n/j H:i:s');
return new Verta(); // 1395/12/12 00:11:35

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


$v = new Verta('2016-12-27 14:12:32');
return $v->format('Y-n-j H:i'); // 1395-10-7 14:12
return $v->format('%B %d، %Y'); // دی 07، 1395
return $v; //1395-10-07 14:12:32

فرمت های از پیش تعیین شدهای در Verta مشخص شده است که چاپ فرمت های رایج را آسانتر میکند :


$v = new Verta();
return $v->format('datetime'); // 1395-12-10 23:25:12
return $v->format('date'); // 1395-12-10
return $v->format('time'); // 23:26:35
return $v->formatDatetime(); // 1395-12-10 23:37:26
return $v->formatDate(); // 1395-12-10
return $v->formatTime(); // 23:26:35
return $v->formatJalaliDatetime(); // 1395/12/10 23:46:09
return $v->formatJalaliDate(); // 1395/12/10

در صورتی که بخواهید اعداد را به صورت فارسی نمایش دهید تابع persianNumbers تبدیل اعداد به فارسی را انجام خواهد داد:


return Verta::persianNumbers($v); // ۱۳۹۶-۱۰-۰۷ ۱۴:۱۲:۳۲

در صورتی که میخواهید معادل میلادی تاریخ خود را چاپ کند از دستور زیر میتوانید استفاده کنید:


return $v->DateTime()->format('Y-m-d H:i:s'); // 2017-05-23 23:21:02
return $v->formatGregorian('Y-m-d H:i:s'); // 2017-05-23 23:21:02

محاسبات

متد های محاسباتی verta همانند carbon می باشدو شما میتوانیدبه تاریخ خود واحد های زمانی سال، ماه،هفته، روز، ساعت، دقیقه و ثانیه اضافه یا کم کنید:


$v = Verta::parse('1395-10-07 14:12:32');
return $v->addYear(); // 1396-10-07 14:12:32
return $v->addYears(4); // 1399-10-07 14:12:32
return $v->subYear(); // 1394-10-07 14:12:32
return $v->subYears(2); // 1393-10-07 14:12:32

return $v->addMonth(); // 1395-11-07 14:12:32
return $v->addMonths(5); // 1396-03-07 14:12:32
return $v->subMonth(); // 1395-09-07 14:12:32
return $v->subMonths(2); // 1395-08-07 14:12:32

return $v->addWeek(); // 1395-10-12 14:12:32
return $v->addWeeks(3); // 1395-10-26 14:12:32
return $v->subWeek(); // 1395-09-30 14:12:32
return $v->subWeeks(2); // 1395-09-27 14:12:32

return $v->addDay(); // 1395-10-08 14:12:32
return $v->addDays(3); // 1395-10-11 14:12:32
return $v->subDay(); // 1395-10-06 14:12:32
return $v->subDays(2); // 1395-09-05 14:12:32

return $v->addHour(); // 1395-10-07 15:12:32
return $v->addHours(5); // 1395-10-07 19:12:32
return $v->subHour(); // 1395-10-07 13:12:32
return $v->subHours(2); // 1395-10-07 12:12:32

return $v->addMinute(); // 1395-10-07 14:13:32
return $v->addMinutes(3); // 1395-10-07 14:15:32
return $v->subMinute(); // 1395-10-07 14:11:32
return $v->subMinutes(2); // 1395-10-07 14:10:32

return $v->addSecond(); // 1395-10-07 14:12:33
return $v->addSeconds(3); // 1395-10-07 14:12:35
return $v->subSecond(); // 1395-10-07 14:12:31
return $v->subSeconds(2); // 1395-10-07 14:12:30

متد های مقایسهای

خروجی متد diffNow رشته ای است که مشخص میکند با تاریخ کنونی چه میزان فاصله واحد زمانی دارد. این متد به صورت خودکار واحد زمانی را بدست می آورد.


$v = Verta::parse('1395-10-07 14:12:32');
return $v->diffNow(); // 2 ماه پیش

$v = Verta::parse('1395/12/12 14:13:50');
return $v->diffNow(); // 5 ثانیه بعد

خروجی متد isLeapYear مشخص میکند سال مورد نظر کبیسه است یا خیر؟


echo Verta::isLeapYear(1394); // false
echo Verta::isLeapYear(1395); // true

خروجی متد isValideDate و isValideTime مشخص میکند معتبر است یا خیر؟

توجه داشته باشید متد isValideDate مخصوص تاریخ شمسی میباشد.


echo Verta::isValideDate(1394, 12, 30); // false
echo Verta::isValideDate(1395, 12, 30); // true

echo Verta::isValideTime(15, 62, 50); // false
echo Verta::isValideTime(15, 12, 30); // true

تبدیلات

شما میتوانید تاریخ میلادی و شمسی به یکدیگر تبدیل کنیدو خروجی آن آرایه ای شامل سه عدد تبدیل شده خواهد بود.

return Verta::getJalali(2015,12,25); // [1394,10,4]
return Verta::getGregorian(1394,10,4); // [2015,12,25]

شما حتی میتوانید تاریخ خود را به انواع کلاسهای تاریخ در php و carbon تبدیل کنید.


$v = Verta::parse('1395/01/05 23:50:25');
$dt = $v->DateTime();
$v = Verta::parse('1395/01/05 23:50:25');
$c = Carbon::instance($v->DateTime());

امیدوارم این مطلب برای شما مفید باشد.