Real Time Web Analytics پرسش و پاسخ Elam

Laravel

استفاده از تاریخ شمسی در لاراول

نویسنده : پدرام رضایی
تاریخ انتشار:
20:41:21 1396-03-29
نحوه افزودن تاریخ شمسی به لاراول و استفاده از آن

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

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

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

خروجی متد  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 مشخص میکند معتبر است یا خیر؟

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

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

تبدیلات

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

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());

 

برچسب ها:
مقالات مشابه