Carbon là một thư viện mạnh mẽ và phổ biến trong Laravel, giúp xử lý datetime một cách đơn giản và hiệu quả trong Laravel và PHP. Với Carbon Laravel, bạn có thể dễ dàng thao tác với ngày giờ, từ định dạng, so sánh, đến thực hiện các phép tính phức tạp. Để tìm hiểu chi tiết về cách sử dụng Carbon và những tính năng hữu ích mà thư viện này mang lại, mời bạn đọc tiếp bài viết mà mình sắp chia sẻ dưới đây.
Điểm chính cần nắm
- Carbon Laravel định nghĩa : Carbon là thư viện mở rộng từ DateTime của PHP, tích hợp sẵn trong Laravel 5.3, cung cấp các tính năng mạnh mẽ như quản lý múi giờ, định dạng, thao tác và chuyển đổi datetime dễ dàng.
- Hướng dẫn sử dụng Carbon trong Laravel và PHP: Carbon hỗ trợ xử lý DateTime hiệu quả, từ thiết lập project, xem thời gian, định dạng, tính toán, đến hiển thị thời gian dưới dạng câu chữ, giúp quản lý ngày giờ linh hoạt và chính xác.
- Vietnix VPS: Giải pháp lưu trữ tối ưu: Vietnix cung cấp VPS với hiệu suất mạnh mẽ, uptime 99.9%, bảo mật đa lớp và hỗ trợ 24/7, đáp ứng mọi nhu cầu từ cơ bản đến nâng cao với tốc độ vượt trội nhờ SSD NVMe.
Carbon là gì?
Carbon là một gói phần mềm do Brian Nesbit phát triển, được xây dựng dựa trên class DateTime của PHP. Kể từ phiên bản Laravel 5.3, Carbon đã được tích hợp mặc định, giúp tối ưu hóa việc xử lý thời gian trong các ứng dụng PHP.

Thư viện này mang lại nhiều giải pháp hữu ích cho việc thao tác với datetime, bao gồm:
- Quản lý múi giờ (timezone) một cách dễ dàng.
- Truy xuất ngày tháng hiện tại chỉ với vài dòng mã.
- Định dạng lại datetime để phù hợp với yêu cầu hiển thị.
- Thực hiện các thao tác phức tạp trên datetime.
- Chuyển đổi các cụm từ tiếng Anh như “next Monday” thành datetime cụ thể.
Cách sử dụng Carbon package trong Laravel và PHP
1. DateTime Laravel
Những lập trình viên đã và đang việc với PHP đều biết việc xử lý những tác vụ liên quan đến thời gian không hề đơn giản. Ta phải giải quyết strtotime
, những vấn đề liên quan đến định dạng, tính toán, và rất nhiều ti tỉ thứ khác nữa.
Carbon PHP package có thể giúp các developer xử lý ngày và giờ trong PHP dễ dàng hơn bao giờ hết, đồng thời code cũng dễ đọc và dễ bảo trì hơn với Carbon – một package do Brian Nesbit phát triển, có khả năng mở rộng class DateTime của PHP.
Package này cung cấp nhiều chức năng để người dùng có thể dễ dàng quản lý ngày tháng ở trong PHP. Chẳng hạn như:
- Xử lý múi giờ
- Xem thời gian hiện tại
- Chuyển đổi ngày giờ sang định dạng dễ đọc hơn
- Phân tích cú pháp trong tiếng Anh (chẳng hạn như
"first day of January 2016"
) - Thực hiện các phép toán cộng, trừ
("+2 weeks"
,"-6 months"
)với các đối tượng ngày giờ.

>> Xem thêm: Package là gì? Tìm hiểu về Package trong Java
2. Điều kiện cài đặt Carbon Laravel
Trước hết, để có thể cài đặt Carbon Laravel, ta cần có những điều kiện sau:
- Đang có một môi trường develop Laravel đang hoạt động. Các bạn có thể tham khảo tài liệu trên trang web chính thức của Laravel để cài đặt. Với Laravel Sail thì ta sẽ còn cần thêm cả Docker.
Trong ví dụ này, chúng tôi sử dụng PHP v8.0.5, Composer v2.0.13, MySQL 8.0.24, Laravel v8.40.0 và Carbon v2.31.
3. Thiết lập project
Để dùng được Carbon Laravel, trước hết ta cần import Carbon trong namespace Carbon
. (Carbon có sẵn trong framework Laravel):
<?php
use Carbon\Carbon;
Bây giờ, ta có thể tự do khám phá thư viện Carbon Laravel.
4. Xem thời gian cụ thể
Để xem thời gian hiện tại:
$current = Carbon::now();
Truy xuất thời gian hiện tại:
$current2 = new Carbon();
Ngày hiện tại:
$today = Carbon::today();
Ngày hôm qua:
$yesterday = Carbon::yesterday();
Ngày mai:
$tomorrow = Carbon::tomorrow();
Phân tích một xâu:
$newYear = new Carbon('first day of January 2016');
- Kết quả:
2016-01-01 00:00:00
Các helper sau cung cấp các request mà con người có thể được đọc với những nhu cầu điển hình về ngày, giờ: today()
, yesterday()
, tomorrow()
.
5. Tạo ngày trong Carbon Laravel
Bên cạnh các cách để xác định ngày giờ nhanh chóng, Carbon còn cho phép chúng ta tạo ngày và giờ từ một số argument cụ thể.
createFromDate()
nhận $year
, $month
, $day
, $tz
(time zone – múi giờ):
Carbon::createFromDate($year, $month, $day, $tz);
createFromTime()
nhận $hour
, $minute
, $second
, and $tz
(time zone):
Carbon::createFromTime($hour, $minute, $second, $tz);
create()
nhận $year
, $month
, $day
, $hour
, $minute
, $second
, $tz
(time zone):
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
Các hàm này rất hữu ích khi ta nhận được những ngày, giờ có định dạng Caron không thể nhận dạng được. Nếu ta pass null
vào các attribute này, mặc định nó sẽ trả về thời gian hiện tại.

6. Xử lý Date và Time
Bên cạnh một số thao tới cơ bản với ngày và giờ, ta còn có thể cần một số tác vụ phức tạp, nâng hơn hơn. Lấy ví dụ: khi tạo một thời gian dùng thử cho user, ta cần thời gian này hết hạn sau một khoảng thời gian nhất định nào đó. Vì vậy, giả sử thời gian dùng thử là 30 ngày, thì ta có thể tính toán nó bằng các phép toán cộng, trừ trong Carbon Laravel.
Trong ví dụ này, ta có thể dùng addDays()
để xác định thời gian hết hạn:
// get the current time
$current = Carbon::now();
// add 30 days to the current time
$trialExpires = $current->addDays(30);
Trong tài liệu Carbon Laravel, còn có một số method của add()
và sub()
khác nữa. Tham khảo ngay tại đây.
Giả sử thời gian được đặt thành 31/1/2012:
$dt = Carbon::create(2012, 1, 31, 0);
echo $dt->toDateTimeString();
Kết quả:
2012-01-31 00:00:00
Việc chỉnh sửa ngày với các hàm addYears()
và subYears()
có kết quả như sau:
Lệnh | Output |
echo $dt->addYear(); | 2012-01-31 00:00:00 |
echo $dt->addYears(5); | 2017-01-31 00:00:00 |
echo $dt->subYear(); | 2011-01-31 00:00:00 |
echo $dt->subYears(5); | 2007-01-31 00:00:00 |
Đối với hàm addMonths()
và subMonths()
:
Lệnh | Output |
echo $dt->addMonth(); | 2012-03-03 00:00:00 |
echo $dt->addMonths(60); | 2017-01-31 00:00:00 |
echo $dt->subMonth(); | 2011-12-31 00:00:00 |
echo $dt->subMonths(60); | 2007-01-31 00:00:00 |
Hãy để ý khi ta thêm một tháng vào “January 31” thì kết quả sẽ là “March 3” chứ không phải “February 28”. Nếu không thích việc này, hãy dùng hàm addMonthWithoutOverflow()
.
Với các hàm addDays()
và subDays()
:
Lệnh | Output |
echo $dt->addDay(); | 2012-02-01 00:00:00 |
echo $dt->addDays(29); | 2012-02-29 00:00:00 |
echo $dt->subDay(); | 2012-01-30 00:00:00 |
echo $dt->subDays(29); | 2012-01-02 00:00:00 |
Hàm addWeekdays()
và subWeekdays()
:
Lệnh | Output |
echo $dt->addWeekday(); | 2012-02-01 00:00:00 |
echo $dt->addWeekdays(4); | 2012-02-06 00:00:00 |
echo $dt->subWeekday(); | 2012-01-30 00:00:00 |
echo $dt->subWeekdays(4); | 2012-01-25 00:00:00 |
Hàm addWeeks()
và subWeeks()
:
Lệnh | Output |
echo $dt->addWeek(); | 2012-02-07 00:00:00 |
echo $dt->addWeeks(3); | 2012-02-21 00:00:00 |
echo $dt->subWeek(); | 2012-01-24 00:00:00 |
echo $dt->subWeeks(3); | 2012-01-10 00:00:00 |
Hàm addHours()
và subHours()
:
Lệnh | Output |
echo $dt->addHour(); | 2012-01-31 01:00:00 |
echo $dt->addHours(24); | 2012-02-01 00:00:00 |
echo $dt->subHour(); | 2012-01-30 23:00:00 |
echo $dt->subHours(24); | 2012-01-30 00:00:00 |
addMinutes()
và subMinutes()
:
Lệnh | Output |
echo $dt->addMinute(); | 2012-01-31 00:01:00 |
echo $dt->addMinutes(61); | 2012-01-31 01:01:00 |
echo $dt->subMinute(); | 2012-01-30 23:59:00 |
echo $dt->subMinutes(61); | 2012-01-30 22:59:00 |
addSeconds()
và subSeconds()
:
Lệnh | Output |
echo $dt->addSecond(); | 2012-01-31 00:00:01 |
echo $dt->addSeconds(61); | 2012-01-31 00:01:01 |
echo $dt->subSecond(); | 2012-01-30 23:59:59 |
echo $dt->subSeconds(61); | 2012-01-30 23:58:59 |
Qua phần này, ta thấy rằng việc điều chỉnh ngày và giờ trong PHP là rất dễ dàng với các hàm add
và subtract
của Carbon Laravel.
7. Getter và Setter trong Carbon Laravel
Một cách khác nữa để ta có thể thao tác với thời gian trong PHP là sử dụng getter và setter của Carbon Laravel.
Đọc giá trị bằng getter:
$dt = Carbon::now();
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);
Thay đổi giá trị bằng setter:
$dt = Carbon::now();
$dt->year = 2015;
$dt->month = 04;
$dt->day = 21;
$dt->hour = 22;
$dt->minute = 32;
$dt->second = 5;
echo $dt;
Ta còn có thể xâu chuỗi các setter với nhau. Đưới dây là một số ví dụ với year()
, month()
, day()
, hour()
, minute()
, và second()
:
$dt->year(2015)->month(4)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString();
Sử dụng setDate()
và setTime()
:
$dt->setDate(2015, 4, 21)->setTime(22, 32, 5)->toDateTimeString();
Sử dụng setDateTime()
:
$dt->setDateTime(2015, 4, 21, 22, 32, 5)->toDateTimeString();
Tất cả những lệnh trên đều đưa ra cùng kết quả: 2015-04-21 22:32:05
.
8. Định dạng Date và Time
Các method toXXXString()
có thể hiển thị ngày và giờ với định dạng được xác định trước:
Lệnh | Output |
echo $dt->toDateString(); | 2015-04-21 |
echo $dt->toFormattedDateString(); | Apr 21, 2015 |
| 22:32:05 |
echo $dt->toDateTimeString(); | 2015-04-21 22:32:05 |
echo $dt->toDayDateTimeString(); | Tue, Apr 21, 2015 10:32 PM |
Ngoài ra còn có thể sử dụng DateTime
format()
trong PHP để tùy chỉnh định dạng:
echo $dt->format('l jS \of F Y h:i:s A');
Trong đó:
l
: Thể hiện đầy đủ các ngày trong tuần (dạng văn bản)jS
:- Ngày trong tháng, không có số 0 ở đầu
- Hậu tố trong tiếng Anh cho ngày của tháng, 2 ký tự
F
: Biểu diễn tháng ở dạng văn bảnY
: Biểu diễn năm ở dạng số với 4 chữ sốh:i:s
:- Định dạng 12 giờ, có số 0 ở đầu
- Phút, với số 0 ở đầu
- Giây, với số 0 ở đầu
A
: Định dạng AM – PM
Kết quả:
Tuesday 21st of April 2015 10:32:05 PM
9. Tính toán thời gian tương đối
Carbon Laravel cho phép ta hiển thị thời gian tương đối bằng các method diff(
).
Chẳng hạn, ta có một blog và muốn hiển thị thời gian đã đăng bài là 3 tiếng trước – 3 hours ago
. Bây giờ, ta sẽ thử làm bằng method trên.
10. Tìm độ chênh lệch
Xét ví dụ sau với Time ở hai mốc thời gian:
$dt = Carbon::create(2012, 1, 31, 0);
$future = Carbon::create(2012, 1, 31, 0);
$past = Carbon::create(2012, 1, 31, 0);
$future = $future->addHours(6);
$past = $past->subHours(6);
Kết quả của hàm diffInHours()
:
Lệnh | Output |
echo $dt->diffInHours($future); | 6 |
echo $dt->diffInHours($past); | 6 |
Xét ví dụ sau với Date ở hai mốc thời gian:
$dt = Carbon::create(2012, 1, 31, 0);
$future = Carbon::create(2012, 1, 31, 0);
$past = Carbon::create(2012, 1, 31, 0);
$future = $future->addMonth();
$past = $past->subMonths(2);
Kết quả của hàm diffInDays()
:
Lệnh | Output |
echo $dt->diffInDays($future); | 31 |
echo $dt->diffInDays($past); | 61 |
11. Hiển thị dưới dạng câu chữ
Bây giờ, ta có thể hiển thị kết quả sao cho người dùng dễ đọc hơn. Chẳng hạn như 3 hours ago. Ta sẽ dùng hàm diffForHumans()
để chuyển kết quả sang định dạng dễ đọc hơn.
Xét ví dụ với ngày ở hai mốc thời gian như sau:
$dt = Carbon::create(2012, 1, 31, 0);
$future = Carbon::create(2012, 1, 31, 0);
$past = Carbon::create(2012, 1, 31, 0);
$future = $future->addMonth();
$past = $past->subMonth();
Kết quả của hàm diffForHumans()
:
Lệnh | Output |
echo $dt->diffForHumans($future); | 1 month before |
echo $dt->diffForHumans($past); | 1 month after |
Vietnix VPS: Hiệu suất cao, ổn định vượt trội
Vietnix là một nhà cung cấp VPS uy tín tại Việt Nam, nổi bật với khả năng xử lý mạnh mẽ và độ ổn định cao. Cam kết uptime lên tới 99.9%, kết hợp bảo mật nhiều tầng và dịch vụ hỗ trợ 24/7, Vietnix giúp hệ thống của bạn vận hành trơn tru, không bị gián đoạn. Các gói VPS AMD, VPS NVMe,… được thiết kế linh hoạt, từ cơ bản đến nâng cao, mang lại tốc độ xử lý vượt trội nhờ sử dụng ổ cứng SSD NVMe hiện đại.
Thông tin liên hệ:
- Hotline: 18001093.
- Email: sales@vietnix.com.vn.
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Trên đây là toàn bộ chia sẻ của mình về cách sử dụng Carbon Laravel, các tính năng nổi bật và lợi ích mà thư viện này đem lại trong việc xử lý datetime. Có thể thấy, Carbon không chỉ giúp đơn giản hóa các thao tác với ngày giờ mà còn là công cụ mạnh mẽ hỗ trợ lập trình viên trong việc tối ưu hóa ứng dụng. Nếu bạn muốn tìm hiểu thêm về các kiến thức chuyên sâu liên quan đến Laravel và PHP, hãy tham khảo thêm một số bài viết dưới đây của mình.