معرفی پکیج Carbon برای کار کردن با تاریخ و زمان در PHP و لاراول
در هر وب سایت، وبلاگ یا شبکههای اجتماعی، برای موارد مختلفی از تاریخ و زمان استفاده میشود، برای مثال، نمایش زمان انتشار، مدت زمان باقی مانده از مدت دوره آزمایشی، مدت زمان گذشته از آخرین بازدید. در این آموزش، برای کار کردن با تاریخ و زمان در PHP و لاراول، از پکیج Carbon استفاده میکنیم.
کار کردن با تاریخ و زمان در PHP، کار آسانی نیست. برای نمونه، گاهی لازم است که یک رشته را به تاریخ و زمان تبدیل کنیم یا محاسباتی روی تاریخ یا زمانها انجام دهیم. یک پکیج عالی به نام Carbon وجود دارد که کار کردن با تاریخ و زمان در PHP و لاراول را خیلی آسانتر میکند و کد شما را بسیار خواناتر و قابل نگهداری میکند.
پکیج Carbon برای کار کردن با تاریخ و زمان در PHP و لاراول
Carbon، یک پکیج است که توسط Brian Nesbit ارائه شد و کلاس DateTime
موجود در PHP را گسترش میدهد.
این پکیج، روشهای خوبی را برای کار کردن با تاریخها، در PHP فراهم میکند. به طور خاص، این روشها میتواند شامل موارد زیر باشد:
- کار کردن با zoneهای زمانی مختلف
- به دست آوردن ساعت فعلی
- تبدیل تاریخ و زمان به فرمتی که خوانا باشد.
- تبدیل یک عبارت انگلیسی به تاریخ و زمان قابل فهم برای PHP
- محاسبات ریاضی (کم کردن و اضافه کردن) روی تاریخ و زمان ( + دو هفته، - شش ماه)
تمامی موارد بالا باعث میشود که پکیج Carbon، یک پکیج مفید برای کار کردن با زمانها در PHP باشد.
راه اندازی پکیج Carbon برای کار کردن با تاریخ و زمان
به منظور استفاده از Carbon، ابتدا باید این پکیج را از فضای نامی Carbon
دریافت کنید. خوشبختانه، این پکیج اخیراً به لاراول اضافه شده و نیازی نیست که با استفاده از 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، قابل شناسایی نیست. اگر به جای هر ویژگی، مقدار null
قرار دهید، مقدار پیشفرض آن ویژگی در نظر گرفته میشود:
Carbon::createFromDate($year, $month, $day, $tz);
Carbon::createFromTime($hour, $minute, $second, $tz);
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
دستکاری تاریخ و زمان در پکیج Carbon
گاهی اوقات، نیاز است که تاریخها و زمانها را دستکاری کنیم. برای مثال، زمانی که یک دوره آزمایشی برای کاربر تعریف میکنیم، لازم است که این دوره پس از مدت زمان خاصی مانند ۳۰ روز، منقضی شود. برای انجام این کار، میتوان به سادگی زمان را با توابع add()
و subtract()
محاسبه کرد.
// get the current time
$current = Carbon::now();
// add 30 days to the current time
$trialExpires = $current->addDays(30);
توابع add()
وsub()
موجود در پکیج Carbon را در کد زیر مشاهده میکنید:
$dt = Carbon::create(2012, 1, 31, 0);
echo $dt->toDateTimeString(); // 2012-01-31 00:00:00
echo $dt->addYears(5); // 2017-01-31 00:00:00
echo $dt->addYear(); // 2018-01-31 00:00:00
echo $dt->subYear(); // 2017-01-31 00:00:00
echo $dt->subYears(5); // 2012-01-31 00:00:00
echo $dt->addMonths(60); // 2017-01-31 00:00:00
echo $dt->addMonth(); // 2017-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps
echo $dt->subMonth(); // 2017-02-03 00:00:00
echo $dt->subMonths(60); // 2012-02-03 00:00:00
echo $dt->addDays(29); // 2012-03-03 00:00:00
echo $dt->addDay(); // 2012-03-04 00:00:00
echo $dt->subDay(); // 2012-03-03 00:00:00
echo $dt->subDays(29); // 2012-02-03 00:00:00
echo $dt->addWeekdays(4); // 2012-02-09 00:00:00
echo $dt->addWeekday(); // 2012-02-10 00:00:00
echo $dt->subWeekday(); // 2012-02-09 00:00:00
echo $dt->subWeekdays(4); // 2012-02-03 00:00:00
echo $dt->addWeeks(3); // 2012-02-24 00:00:00
echo $dt->addWeek(); // 2012-03-02 00:00:00
echo $dt->subWeek(); // 2012-02-24 00:00:00
echo $dt->subWeeks(3); // 2012-02-03 00:00:00
echo $dt->addHours(24); // 2012-02-04 00:00:00
echo $dt->addHour(); // 2012-02-04 01:00:00
echo $dt->subHour(); // 2012-02-04 00:00:00
echo $dt->subHours(24); // 2012-02-03 00:00:00
echo $dt->addMinutes(61); // 2012-02-03 01:01:00
echo $dt->addMinute(); // 2012-02-03 01:02:00
echo $dt->subMinute(); // 2012-02-03 01:01:00
echo $dt->subMinutes(61); // 2012-02-03 00:00:00
echo $dt->addSeconds(61); // 2012-02-03 00:01:01
echo $dt->addSecond(); // 2012-02-03 00:01:02
echo $dt->subSecond(); // 2012-02-03 00:01:01
echo $dt->subSeconds(61); // 2012-02-03 00:00:00
توابع Getter و Setter در پکیج Carbon در PHP و لاراول
یک راه سریع دیگر برای دستکاری یا خواندن زمان، استفاده از توابع dump()
و set()
موجود است. در این پکیج، از تابع dump()
برای دریافت پارامتر و از تابع set
برای مقداردهی استفاده میشود.
$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();
// 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);
فرمت تایخ و زمان در پکیج Carbon در PHP و لاراول
در پکیج Carbon، میتوانید به سادگی فرمت تاریخ یا زمان را تغییر دهید. برای مثال، در کد بالا از تابع toDateTimeString()
برای تبدیل تاریخ و زمان به رشته استفاده شده است:
$dt = Carbon::now();
echo $dt->toDateString(); // 2015-12-19
echo $dt->toFormattedDateString(); // Dec 19, 2015
echo $dt->toTimeString(); // 10:10:16
echo $dt->toDateTimeString(); // 2015-12-19 10:10:16
echo $dt->toDayDateTimeString(); // Sat, Dec 19, 2015 10:10 AM
// ... of course format() is still available
echo $dt->format('l jS \\of F Y h:i:s A'); // Saturday 19th of December 2015 10:10:16 AM
نمایش زمان های نسبی در پکیج Carbon در PHP و لاراول
با تابع diff()
، میتوانید به سادگی زمانها را نسبت به یک زمان دیگر نمایش دهید.
برای مثال، ما یک وبلاگ داریم و میخواهیم زمان انتشار پستی را سه ساعت پیش تنظیم کنیم. برای این کار، میتوانیم از توابع diff()
موجود در پکیج Carbon استفاده کنیم. این توابع، تفاوت را در قالب یک عدد برمیگردانند:
$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
در چند سال اخیر، نمایش نسبی زمان بسیار رایج شده است. یک مثال رایج، استفاده از زمانهای نسبی در شبکههای اجتماعی مانند فیس بوک و توئیتر است.
برای نمایش زمان نسبی، میتوان دو زمان را به دست آورد و سپس آن را به شکلی که برای انسان قابل خواندن باشد، تبدیل کرد.
چهار حالت برای نمایش زمان نسبی وجود دارد:
- مقایسه زمانی در گذشته با زمان حال (۱ ساعت پیش، ۵ ماه پیش)
- مقایسه زمانی در آِینده با زمان حال (۱ ساعت از الان، ۵ ماه از الان)
- مقایسه زمانی در گذشته با یک زمان دیگر (۱ ساعت پیش از، ۵ ماه پیش از)
- مقایسه زمانی در آینده با یک زمان دیگر (۱ ساعت بعد از، ۵ ماه بعد از)
$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); // 1 month before
کارهای زیاد دیگری وجود دارد که میتوان با پکیج Carbon، آنها را انجام داد. خوشبختانه این پکیج، کار کردن با تاریخ و زمان را در PHP آسانتر میکند و در نتیجه سرعت توسعه شما را بالاتر میبرد.
آیا شما با این پکیج در PHP و لاراول کار کردهاید؟ میتوانید تجربیات و سوالات خودتان را در بخش دیدگاهها با ما به اشتراک بگذارید. برای دنبال کردن، پکیجها و ویژگیهای متفاوت دیگر از لاراول و PHP، با ما در کتابخانه آنلاین لیداوب همراه باشید.
متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند
دیدگاه ها 2
سلام میشه کمکم کنین؟ من دارم ازمون انلاین می نویسم(laravel) و تاریخ و ساعت شروع و پایان رو از ادمین می گیرم و بعد باید بگم راش این ساعت شروع شو و راس همون ساعت تموم. تاریخ رو مشکلی ندارم با پکیج ورتا می تون درستش کنم اما نکته درباره ساعته که من دارم به ساعت ایران می گیرم درر حالیکه Carbon::now ساعت رو به زمان ایران نمیده حالاچطوری تایمم رو تبدیل کنم تا با تایم کربن بتونم مقایسه کنم؟
درود، برای استفاده از تاریخ و زمان ایران باید منطقه زمانی خود را بر روی Asia/Tehran تنطیم کنید