Carbon، یک پکیج است که توسط Brian Nesbit ارائه شد.آیا کنجکاو هستید که بدانید پکیج Carbon در لاراول چه کاربردهایی دارد؟ کار با تاریخ و زمان در PHP، ممکن است کار چندان راحتی نباشد. چرا که بحث تاریخ و زمان برای توسعهدهندگان PHP دردسرهای خاص خودش را دارد. کار کردن با توابع PHP مثل strtotime، مشکلات فرمت دهی تاریخ و زمان، محاسبات بسیار و… نمونههایی از چالشهای ایجاد شده، هنگام کار با تاریخ و زمان در PHP میباشند.برای نمونه، گاهی لازم است که یک رشته را به تاریخ و زمان تبدیل کنیم یا محاسباتی روی تاریخ یا زمانها انجام دهیم. یک پکیج عالی به نام Carbon وجود دارد که کار کردن با تاریخ و زمان در PHP و لاراول را خیلی آسانتر میکند و کد شما را بسیار خواناتر و قابل نگهداری میکند.
پکیج Carbon در لاراول چه کاربردهایی دارد؟
پکیج Carbon در لاراول، از کلاس DateTime خود PHP ارث بری میکند. پکیج کربن امکانات بسیار خوبی را برای کار با تاریخ و زمان در PHP و لاراول، فراهم میکند که عبارتند از:
- مشخص کردن محدودهی زمانی یا Timezone
- سادگی دسترسی به زمان کنونی
- تبدیل Datetime برای خوانایی بیشتر
- تبدیل یک عبارت انگلیسی به Datetime
- کاستن و افزودن تاریخ و زمان
- مقایسهی تاریخ و زمان
- خوانایی بیشتر کد به لحاظ معنایی
تمامی موارد فوق، توسعهدهندگان PHP و لاراول را ناگزیر به استفاده از این پکیج کاربردی، برای کار با تاریخ و زمان در PHP میکنند. در ادامه، نحوهی نصب پکیج Carbon را توضیح میدهیم.
راه اندازی پکیج Carbon برای کار کردن با تاریخ و زمان
برای استفاده از پکیج Carbon، تنها نیاز دارید تا از Namespace آن استفاده کنید.. خوشبختانه، این پکیج اخیراً به لاراول اضافه شده و نیازی نیست که با استفاده از composer
، آن را بگیرید. هر زمان که نیازی به استفاده از پکیج Carbon داشتید، میتوانید مثال زیر آن را بگیرید و استفاده کنید:
<?php
use Carbon\Carbon;
ایجاد زمان و تاریخ خاص در پکیج Carbon
روشهای متفاوتی برای ایجاد تاریخ و زمان وجود دارد. برای مثال، شما میتوانید تاریخ متناظر با امروز، فردا یا غیره را ایجاد کنید. همچنین، میتوانید تاریخ و زمان را با استفاده از رشتهای که از کاربر دریافت کردید، ایجاد کنید.
// get the current time - 2015-12-19 10:10:54
$current = Carbon::now();
$current = new Carbon();
// get today - 2015-12-19 00:00:00
$today = Carbon::today();
// get yesterday - 2015-12-18 00:00:00
$yesterday = Carbon::yesterday();
// get tomorrow - 2015-12-20 00:00:00
$tomorrow = Carbon::tomorrow();
// parse a specific string - 2016-01-01 00:00:00
$newYear = new Carbon('first day of January 2016');
// set a specific timezone - 2016-01-01 00:00:00
$newYearPST = new Carbon('first day of January 2016', 'America\Pacific');
همچنین، میتوانید با پاس دادن یک رشته هنگام ایجاد یک نمونه از کلاس Carbon، آن را به شیء Carbon تبدیل کنید:
// parse a specific string - 2021-01-01 00:00:00
$newYear = new Carbon('first day of January 2021');
// set a specific timezone - 2021-01-01 00:00:00
$newYearPST = new Carbon('first day of January 2021', 'America\Pacific');
این رشته را میتوانید به اشکال گوناگون پاس دهید؛ برای مثال:
$carbon = new Carbon('November 5th 2021');
$carbon = new Carbon('5th November 2021');
$carbon = new Carbon('20211105');
$carbon = new Carbon('2021/11/5');
$carbon = new Carbon('21-11-05');
$carbon = new Carbon('2021-11-05');
فرمتدهی به تاریخ و زمان در PHP
میتوانید برای تبدیل شیء Carbon ایجاد شده به یک رشته با فرمت خاص، از متدهای متعددی که این پکیج در اختیار شما قرار میدهد، استفاده کنید. برای مثال:
$newDateTime = Carbon::create(2021, 11, 05, 11, 45, 21, 'UTC');
$newDateTime ->toDateTimeString()
// output: ‘2021-11-05 11:45:21’
$newDateTime ->toAtomString()
// output: ‘2021-11-05T11:45:21+00:00’
$newDateTime ->toCookieString()
// output: ‘Friday, 05-Nov-2021 11:45:21 UTC’
$newDateTime ->toDayDateTimeString()
// output: ‘Fri, Nov 5, 2021 11:45 AM’
$newDateTime ->toFormattedDateString()
// output: ‘Nov 5, 2021’
$newDateTime ->toTimeString()
// output: ‘11:45:21’
$newDateTime ->toDateString()
// output: ‘2021-11-05’
برای تبدیل به فرمت دلخواه خود میتوانید از متد format استفاده کنید:
$newDateTime ->format('l jS \\of F Y h:i:s A')
// output: ‘Friday 5th of November 2021 11:45:21 AM’
Getterها و Setterها در پکیج کربن
برای تغییر تاریخ و زمان یا اخذ آن، میتوانید از Getterها و Setterها به روش زیر استفاده کنید:
$dt = Carbon::now();
// set some things
$dt->year = 2015;
$dt->month = 04;
$dt->day = 21;
$dt->hour = 22;
$dt->minute = 32;
$dt->second = 5;
// get some things
var_dump($dt->year);
var_dump($dt->month);
var_dump($dt->day);
var_dump($dt->hour);
var_dump($dt->second);
var_dump($dt->dayOfWeek);
var_dump($dt->dayOfYear);
var_dump($dt->weekOfMonth);
var_dump($dt->daysInMonth);
میتوانیم متدهای Setter را به صورت زنجیرهای فراخوانی کنیم:
$dt = Carbon::now();
$dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString();
$dt->setDate(1975, 5, 21)->setTime(22, 32, 5)->toDateTimeString();
$dt->setDateTime(1975, 5, 21, 22, 32, 5)->toDateTimeString();
گرفتن زمان نسبی در PHP
پکیج کربن این امکان را برای ما فراهم میآورد تا با استفاده از متدهای diff، زمان را به صورت نسبی نمایش دهیم. برای مثال، فرض کنید که یک بلاگ داریم و میخواهیم زمان انتشار را به شکل، مثلا، 3 ساعت پیش، نمایش دهیم. برای انجام این کار، میتوانیم به راحتی از متدهای diff استفاده کنیم.
یافتن اختلاف زمانی در PHP
متدهای زیر برای یافتن رقم اختلاف استفاده میشوند:
$current = Carbon::now();
$dt = Carbon::now();
$dt = $dt->subHours(6);
echo $dt->diffInHours($current); // -6
echo $current->diffInHours($dt); // 6
$future = $current->addMonth();
$past = $current->subMonths(2);
echo $current->diffInDays($future); // 31
echo $current->diffInDays($past); // -62
نمایش اختلاف زمانی برای کاربر
گاهی نیاز داریم اختلاف زمانی را به صورت خوانا، برای کاربر نمایش دهیم. با استفاده از متد diffForHumans میتوانیم هم اختلاف را بیابیم و هم آن را به صورت خوانا برای کاربر نمایش دهیم. برای مثال:
$dt = Carbon::now();
$past = $dt->subMonth();
$future = $dt->addMonth();
echo $dt->subDays(10)->diffForHumans(); // 10 days ago
echo $dt->diffForHumans($past); // 1 month ago
echo $dt->diffForHumans($future);
آیا پکیج Carbon در پروژههای دیگری نیز مورد استفاده قرار گرفته است؟
بله، پکیج Carbon در پروژههای دیگری نیز مورد استفاده قرار گرفته است. پکیج Carbon یکی از پرکاربردترین پکیجهای موجود در زمینه کار با تاریخ و زمان در PHP است و بسیاری از توسعهدهندگان به طور گسترده از آن در پروژههای خود استفاده میکنند. به عنوان مثال، Laravel که یکی از محبوبترین فریمورکهای PHP است، از پکیج Carbon به عنوان یکی از ابزارهای اصلی خود برای کار با تاریخ و زمان استفاده میکند. همچنین، پکیج Carbon در بسیاری از پروژههای دیگری همچون WordPress، Drupal و Symfony نیز به صورت گسترده مورد استفاده قرار میگیرد. به طور کلی، پکیج Carbon به دلیل کارایی، سادگی و امکانات قدرتمندی که ارائه میدهد، در بسیاری از پروژههای PHP مورد استفاده قرار میگیرد.
آیا پکیج Carbon در پروژههای بزرگی مانند Facebook و Google نیز استفاده شده است؟
پکیج Carbon در پروژههای بزرگی مانند Facebook و Google نیز استفاده شده است. هر دو شرکت Facebook و Google از PHP به عنوان زبان اصلی برای توسعه سرویسها و اپلیکیشنهای خود استفاده میکنند و از پکیج Carbon نیز برای کار با تاریخ و زمان استفاده میکنند.
در واقع، پکیج Carbon به دلیل قابلیتهای قدرتمندی که ارائه میدهد، در بسیاری از پروژههای بزرگ توسعه داده شده با PHP مورد استفاده قرار میگیرد. برای مثال، Laravel که یکی از پرکاربردترین فریمورکهای PHP است، از پکیج Carbon به عنوان یکی از ابزارهای اصلی خود برای کار با تاریخ و زمان استفاده میکند و این فریمورک در بسیاری از پروژههای بزرگی مانند Trello، Slack و Asana نیز استفاده شده است. به طور کلی، پکیج Carbon در بسیاری از پروژههای بزرگ و معتبر توسعه داده شده با PHP مورد استفاده قرار میگیرد.
آیا پکیج Carbon در پروژههایی با حجم داده بالا نیز به خوبی عمل میکند؟
بله، پکیج Carbon در پروژههایی با حجم داده بالا همچنین به خوبی عمل میکند. در واقع، پکیج Carbon به دلیل استفاده از کلاس DateTime پیادهسازی شده است که این کلاس قدرتمند و بهینه برای کار با تاریخ و زمان در PHP میباشد. بنابراین، در پروژههای با حجم داده بالا نیز پکیج Carbon با کارایی و عملکرد قابل قبولی عمل میکند.
همچنین، میتوان با استفاده از برخی از روشهای بهینه سازی مانند caching و indexing، عملکرد پکیج Carbon را در پروژههایی با حجم داده بالا بهبود بخشید. به عنوان مثال، میتوان از caching برای ذخیره کردن نتایج پردازش شده توسط پکیج Carbon استفاده کرد تا زمان پردازش بعدی بهینه شود. همچنین، در صورت نیاز به مقایسه تاریخها در پروژههایی با حجم داده بالا، میتوان از indexing برای افزایش سرعت عملیات مقایسه استفاده کرد.
بنابراین، پکیج Carbon با کارایی و عملکرد قابل قبولی در پروژههای با حجم داده بالا عمل میکند و با استفاده از روشهای بهینه سازی، میتوان عملکرد آن را بهبود بخشید.
منابع تکمیلی
برای مشاهدهی تمامی متدهای موجود در پکیج Carbon که تعدادشان بسیار زیاد و متنوع نیز هست، میتوانید به مستندات رسمی پکیج Carbon مراجعه کنید.