برنامه نویسان فارسی زبان برای استفاده از تاریخ شمسی از الگوریتم تبدیل تاریخ میلادی به شمسی استفاده می کنند. برای زبان 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());
امیدوارم این مطلب برای شما مفید باشد.