Xử lý Date/Time dễ dàng với Carbon trong Laravel

Làm việc với ngày và giờ trong PHP không phải là nhiệm vụ dễ dàng gì. Chúng ta phải đối mặt với các vấn đề về thời gian, định dạng, nhiều tính toán, v.v.

Có một package khá tiện lợi có tên Carbon có thể giúp việc xử lý ngày / giờ trong PHP dễ dàng hơn và có nhiều ngữ nghĩa hơn để code của chúng tôi có thể trở nên dễ đọc và dễ bảo trì hơn.

Carbon là gì?

Carbon là một gói phần mềm được phát triển bởi Brian Nesbit mở rộng từ class DateTime của PHP. Từ phiên bản 5.3, Laravel đã tích hợp sẵn thư viện này vào Project. Việc sử dụng tốt thư viện này sẽ giúp bạn rất nhiều vấn đề về xử lý thời gian. Thư viện này giúp chúng ta rất nhiều trong việc xử lý datetime trong PHP. Điển hình như:

  • Xử lý timezone.
  • Lấy ngày tháng hiện tại dễ dàng.
  • Convert datetime sang định dạng khác để đọc
  • Dễ dàng thao tác với datetime.
  • Chuyển đổi cú pháp là cụm từ tiếng anh sang datetime.

Cách sử dụng Carbon trong Laravel

– Bạn cần import thư viện để sử dụng:

<?php
use Carbon\Carbon;
  • Lấy thời gian:
Carbon::now(); // thời gian hiện tại 2018-10-18 14:15:43
Carbon::yesterday(); //thời gian hôm qua 2018-10-17 00:00:00
Carbon::tomorrow(); // thời gian ngày mai 2018-10-19 00:00:00
$newYear = new Carbon('first day of January 2018'); // 2018-01-01 00:00:00
  • Để lấy tgian hiện tại tại Việt Nam ta sẽ thêm locale của Việt nam như sau:
echo Carbon::now('Asia/Ho_Chi_Minh'); // 2018-10-18 21:15:43
  • Để biết thêm về các nước khác bạn có thể tại trang chủ của PHP: Timezone
  • Bạn cũng có thể chuyển đổi kiểu datetime khác:
$dt = Carbon::now('Asia/Ho_Chi_Minh');

echo $dt->toDayDateTimeString();  Thu, Oct 18, 2018 9:16 PM

echo $dt->toFormattedDateString(); // Oct 18, 2018

echo $dt->format('l jS \\of F Y h:i:s A'); // Thursday 18th of October 2018 09:18:57 PM

echo $dt->toDateString();               // 2018-10-18
echo $dt->toTimeString();               // 21:16:20
echo $dt->toDateTimeString();           // 2018-10-18 21:16:16

– Các bạn cũng có thể chỉ lấy ngày, tháng, năm, giờ, phút, giây, ngày của tuần, ngày của tháng, ngày của năm, tuần của tháng, tuần của năm, số ngày trong tháng. Thật dễ dàng :))

Carbon::now()->day; //ngày
    Carbon::now()->month; //tháng
    Carbon::now()->year; //năm
    Carbon::now()->hour; //giờ
    Carbon::now()->minute; //phút
    Carbon::now()->second; //giây
    Carbon::now()->dayOfWeek; //ngày của tuần
    Carbon::now()->dayOfYear; //ngày của năm
    Carbon::now()->weekOfMonth; //ngày của tháng
    Carbon::now()->weekOfYear; //tuần của năm
    Carbon::now()->daysInMonth; //số ngày trong tháng

– Có thể tăng giảm ngày, tháng, năm, giờ, phút, giây bằng hàm 2 hàm add() và sub()

$dt = Carbon::now();

echo $dt->addYears(5);                 
echo $dt->addYear();                    
echo $dt->subYear();                  
echo $dt->subYears(5);            

echo $dt->addMonths(60);                
echo $dt->addMonth();       
echo $dt->subMonth();                   
echo $dt->subMonths(60);  

echo $dt->addWeeks(3);                 
echo $dt->addWeek();                  
echo $dt->subWeek();                
echo $dt->subWeeks(3);       

echo $dt->addDays(29);                  
echo $dt->addDay();                   
echo $dt->subDay();                     
echo $dt->subDays(29); 

echo $dt->addHours(24);                  
echo $dt->addHour();                 
echo $dt->subHour();                   
echo $dt->subHours(24);   
...

– Ta cũng có thể so sánh với thời gian hiện tại một cách dễ dàng: Nó sẽ trả về là true hay false.

$now = Carbon::now();
    $now->isWeekday();
    $now->isWeekend();
    $now->isYesterday();
    $now->isToday();
    $now->isTomorrow();
    $now->isFuture()
    $now->isPast();
    $now->isBirthday(); // là ngày sinh nhật hay không

– Tính toán sự khác nhau giữa 2 datetime:

$dt = Carbon::create(2018, 10, 18, 21, 40, 16); //Tạo 1 datetime
    $now = Carbon::now();
    echo $now->diffInSeconds($dt);
    echo $now->diffInMinutes($dt);
    echo $now->diffInHours($dt);
    echo $now->diffInDays($dt);
    echo $now->diffInMonths($dt);
    echo $now->diffInYears($dt);

– Như trên facebook các bạn thấy các bài viết sẽ có trạng thái là 1 phút trước, 1 giờ trước chẳng hạn Carbon cũng hỗ trợ các bạn phần này luôn:

Carbon::setLocale('vi'); // hiển thị ngôn ngữ tiếng việt.
    $dt = Carbon::create(2018, 10, 18, 14, 40, 16);
    $dt2 = Carbon::create(2018, 10, 18, 13, 40, 16);
    $now = Carbon::now();
    echo $dt->diffForHumans($now); //12 phút trước
    echo $dt2->diffForHumans($now); //1 giờ trước

Trên đây mình chỉ liệt kê những kiểu thường dùng, ngoài ra còn rất nhiều các kiểu khác nữa, bạn có thể tham khảo tại trang chủ của Carbon tại carbon.

Có thể bạn muốn đọc thêm:

Xem thêm việc làm laravel hấp dẫn lương cao tại TopDev!