Thứ ba, 15/09/2020 | 00:00 GMT+7

Ngày / Giờ dễ dàng hơn trong Laravel và PHP với Carbon

Làm việc với ngày và giờ trong PHP không phải là nhiệm vụ dễ nhất hoặc rõ ràng nhất. Ta phải đối phó với strtotime , các vấn đề về định dạng, rất nhiều phép tính và hơn thế nữa.

Gói tiện lợi có tên Carbon có thể giúp xử lý ngày / giờ trong PHP dễ dàng hơn và mang tính ngữ nghĩa hơn nhiều để mã của ta có thể trở nên dễ đọc và dễ bảo trì hơn.

Carbon là một gói của Brian Nesbit mở rộng lớp DateTime của riêng PHP.

Nó cung cấp một số chức năng hay để xử lý ngày tháng trong PHP. Cụ thể những thứ như:

  • Xử lý múi giờ
  • Nhận thời gian hiện tại dễ dàng
  • Chuyển đổi ngày giờ thành một thứ gì đó có thể đọc được
  • Phân tích cú pháp một cụm từ tiếng Anh thành datetime ( ngày đầu tiên của tháng 1 năm 2016 )
  • Cộng và Trừ ngày ( + 2 tuần , -6 tháng )
  • Cách xử lý ngữ nghĩa với ngày tháng

Tất cả những điều trên dẫn đến một gói rất hữu ích giúp bạn dễ dàng xử lý thời gian trong PHP.

Cài đặt

Để sử dụng Carbon, bạn cần nhập Carbon từ không gian tên Carbon . May mắn cho ta , Carbon đã được đưa vào Laravel nên không cần phải thêm nó bằng Composer .

Khi nào ta cần sử dụng Carbon, ta có thể nhập nó như vậy:

<?php use Carbon\Carbon; 

Sau khi nhập, hãy xem một số điều thú vị mà ta có thể làm với gói tuyệt vời này.

Lấy một ngày / giờ cụ thể

// 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'); 

Tạo ngày với kiểm soát chi tiết hơn

Ngoài các cách nhanh chóng để xác định ngày / giờ, Carbon cũng cho phép ta tạo ngày / giờ từ một số đối số cụ thể.

Carbon::createFromDate($year, $month, $day, $tz); Carbon::createFromTime($hour, $minute, $second, $tz); Carbon::create($year, $month, $day, $hour, $minute, $second, $tz); 

Chúng rất hữu ích khi bạn nhận được một số loại ngày hoặc giờ ở định dạng mà Carbon thường không nhận dạng được. Nếu bạn chuyển null cho bất kỳ thuộc tính nào trong số đó, nó sẽ mặc định là hiện tại.

Thao tác ngày / giờ

Nắm bắt ngày / giờ không phải là điều duy nhất bạn cần làm khi làm việc với ngày tháng. Thông thường, bạn cần thao tác ngày hoặc giờ.

Ví dụ: khi tạo thời gian dùng thử cho user , bạn cần thời gian dùng thử hết hạn sau một khoảng thời gian nhất định. Vì vậy, giả sử ta có thời gian dùng thử 30 ngày. Ta có thể dễ dàng tính toán rằng thời gian với addsubtract .

Trong thời gian dùng thử này, ta sẽ:

// get the current time $current = Carbon::now();  // add 30 days to the current time $trialExpires = $current->addDays(30); 

Từ tài liệu Carbon , đây là một số phương thức add()sub() khác có sẵn cho ta :

$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 

Người nhận và Người định cư

Một cách nhanh chóng khác để thao tác hoặc đọc thời gian là sử dụng getters và setters có sẵn.

$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); 

Ta thậm chí có thể xâu chuỗi một số 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(); 

Định dạng

Trong ví dụ trên, bạn có thể nhận thấy phương thức -&gt;toDateTimeString() . Ta có thể dễ dàng định dạng ngày / giờ cho các mục đích của bạn . Trong trường hợp đó, ta có một chuỗi ngày giờ.

$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 

Thời gian tương đối

Carbon cho phép ta dễ dàng hiển thị thời gian tương đối với các phương thức diff() .

Ví dụ: giả sử ta có một blog và muốn hiển thị thời gian đã xuất bản là 3 giờ trước . Ta có thể làm điều đó với các phương pháp này.

Tìm kiếm sự khác biệt

Các phương pháp này được sử dụng để chỉ tìm số chênh lệch.

$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 

Thể hiện sự khác biệt cho loài người

Việc hiển thị thời gian một cách tương đối đôi khi có thể hữu ích hơn cho người đọc so với ngày tháng hoặc dấu thời gian.

Ví dụ: thay vì hiển thị thời gian của một bài đăng như 8:12 sáng , thời gian sẽ được hiển thị là 3 giờ trước .

Phương thức diffForHumans() được sử dụng để tính toán sự khác biệt và cũng chuyển nó sang định dạng con người có thể đọc được.

Dưới đây là một số ví dụ:

    $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 

Kết luận

Còn rất nhiều điều mà Carbon có thể làm. Hãy chắc chắn xem qua các tài liệu chính thức của Carbon . Hy vọng rằng điều này sẽ giúp sử dụng date / times trong PHP dễ dàng hơn và tăng tốc thời gian phát triển!


Tags:

Các tin liên quan

Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên Ubuntu 20.04
2020-06-29
Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên CentOS 8
2020-06-04
Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên CentOS 7
2020-04-21
Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên Debian 10
2020-04-10
Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên Ubuntu 18.04
2020-04-02
Cách sử dụng extension PDO PHP để thực hiện giao dịch MySQL bằng PHP trên Ubuntu 18.04
2020-03-25
Cách triển khai ứng dụng PHP với Kubernetes trên Ubuntu 18.04
2019-08-07
Cách triển khai một ứng dụng PHP với Kubernetes trên Ubuntu 16.04
2019-01-18
Cách tạo địa chỉ kỹ thuật số ngắn và duy nhất cho bất kỳ vị trí nào bằng AngularJS và PHP
2018-08-16
Cách thay đổi cài đặt PHP của bạn trên Ubuntu 14.04
2016-03-25