Carbon is a package that helps us to deal with date and time in Laravel and PHP in a much easier and systematic manner.
As a part of our Server Management Services, we help our Customers with PHP related errors regularly.
Let us today discuss how to manage Date/Time easily in Laravel and PHP with Carbon.
How to setup Carbon?
Carbon is already included in Laravel. Thus, whenever we need to use Carbon, we can import it like:
<?php
use Carbon\Carbon;
Now we can use this package to perform various activities. For instance, to obtain a Specific Date/Time we can use any of the formats below:
// get the current time
$current = Carbon::now();
$current = new Carbon();
// get today
$today = Carbon::today();
// get yesterday
$yesterday = Carbon::yesterday();
// get tomorrow
$tomorrow = Carbon::tomorrow();
// parse a specific string
$newYear = new Carbon('first day of January 2021');
// set a specific timezone
$newYearPST = new Carbon('first day of January 2021', 'America\Pacific');
Creating Dates from specific arguments
In addition to the quick ways to define date/times, Carbon also lets us create date/times from a specific number of arguments.
Carbon::createFromDate($year, $month, $day, $tz);
Carbon::createFromTime($hour, $minute, $second, $tz);
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
If we pass in null for any of those attributes, it will default to current.
Manipulating the Date/Time
While working with date/time we may often need to manipulate the date or time.
For instance, when creating a trial period for a user, we will want the trial period to expire after a certain amount of time. So let us say we have a 30 day trial period. We could easily calculate that time with add and subtract.
For this trial period, we would do:
// get the current time
$current = Carbon::now();
// add 30 days to the current time
$trialExpires = $current->addDays(30);
From the Carbon docs, here are some of the other add() and sub() methods available to us:
$dt = Carbon::create(2020, 1, 31, 0);
echo $dt->toDateTimeString(); // 2020-01-31 00:00:00
echo $dt->addYears(5); // 2025-01-31 00:00:00
echo $dt->addYear(); // 2026-01-31 00:00:00
echo $dt->subYear(); // 2025-01-31 00:00:00
echo $dt->subYears(5); // 2020-01-31 00:00:00
echo $dt->addMonths(60); // 2025-01-31 00:00:00
echo $dt->addMonth(); // 2025-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps
echo $dt->subMonth(); // 2025-02-03 00:00:00
echo $dt->subMonths(60); // 2020-02-03 00:00:00
echo $dt->addDays(29); // 2020-03-03 00:00:00
echo $dt->addDay(); // 2020-03-04 00:00:00
echo $dt->subDay(); // 2020-03-03 00:00:00
echo $dt->subDays(29); // 2020-02-03 00:00:00
echo $dt->addWeekdays(4); // 2020-02-09 00:00:00
echo $dt->addWeekday(); // 2020-02-10 00:00:00
echo $dt->subWeekday(); // 2020-02-09 00:00:00
echo $dt->subWeekdays(4); // 2020-02-03 00:00:00
echo $dt->addWeeks(3); // 2020-02-24 00:00:00
echo $dt->addWeek(); // 2020-03-02 00:00:00
echo $dt->subWeek(); // 2020-02-24 00:00:00
echo $dt->subWeeks(3); // 2020-02-03 00:00:00
echo $dt->addHours(24); // 2020-02-04 00:00:00
echo $dt->addHour(); // 2020-02-04 01:00:00
echo $dt->subHour(); // 2020-02-04 00:00:00
echo $dt->subHours(24); // 2020-02-03 00:00:00
echo $dt->addMinutes(61); // 2020-02-03 01:01:00
echo $dt->addMinute(); // 2020-02-03 01:02:00
echo $dt->subMinute(); // 2020-02-03 01:01:00
echo $dt->subMinutes(61); // 2020-02-03 00:00:00
echo $dt->addSeconds(61); // 2020-02-03 00:01:01
echo $dt->addSecond(); // 2020-02-03 00:01:02
echo $dt->subSecond(); // 2020-02-03 00:01:01
echo $dt->subSeconds(61); // 2020-02-03 00:00:00
Getters and Setters
Another quick way to manipulate or read the time is to use the getters and setters available.
$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);
We can even string together some setters
$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();
Finding the Difference
There are methods available in Carbon to find the difference in time. Some among them are listed below:
$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
Relative Time
The diff() method helps us to display relative time. For instance, if we want to display the published time of a blog in a relative manner like 3 hours ago instead of the actual timestamp, we could use the diffForHumans() method. Some of the usages for the method include
$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
[Need any further assistance in fixing PHP errors? – We’re available 24*7]
Conclusion
In short, Carbon is a package that helps us to deal with date/time in Laravel and PHP in a much easier and systematic manner. Today, we saw how our Support Engineers manage date/time easily in Laravel and PHP with Carbon.
0 Comments