Tìm hiểu về Thư viện DateTime Carbon trong Laravel


Cập nhật: 2 năm trước
Bài viết ngẫu nhiên:

   Laravel 5.6: Thiết kế trang đăng nhập hệ thống quản trị Login

   Responsive cho videos trên kênh YouTube nhúng vào website của bạn

   XD phần mềm Quản lý điểm: Bài 8. Xử lý Bảng điểm chi tiết của Sinh viên

   Phân biệt hai khái niệm Website và Cổng thông tin điện tử (Portal)

   Bài 7. Tích hợp CkEditor vào Website, Xây dựng trang cập nhật bản tin mới trên asp net trên Visual Studio 2015

   Hướng dẫn cài đặt Opencart - CMS hệ thống bán hàng trực tuyến


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.

Carbon cung cấp một số hàm khá tốt để xử lý với date trong PHP:
    - Xử lý với timezone
    - Lấy datetime hiện tại dễ dàng
    - Convert datetime sang 1 số định dạng khác dễ đọc
    - Phân tích 1 cụm từ tiếng Anh sang định dạng datetime
    - Dễ dàng thao tác với datetime
Dưới đây là một số tham khảo chi tiết về thư viện Carbon:

addWeeks(2);

// Khởi tạo theo date: Thời gian mặc định là thời gian hiện tại
Carbon::createFromDate($year, $month, $day, $tz);

// Khởi tạo theo time: Ngày tháng năm mặc định là ngày tháng năm hiện tại
Carbon::createFromTime($hour, $minute, $second, $tz);

// Khởi tạo theo cả date và time
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);

// Khởi tạo theo datetime và format xác định
Carbon::createFromFormat($format, $time, $tz);

// Khởi tạo datetime để làm việc với [unix timestamp](https://en.wikipedia.org/wiki/Unix_time)
Carbon::createFromTimestamp($timestamp, $tz)
// Nếu tham số truyền vào là không phù hợp thì sẽ throw ra lỗi InvalidArgumentException với message lỗi được định nghĩa trong DateTime::getLastErrors().

// Thiết lập múi giờ
$nowInLondonTz = Carbon::now('Europe/London');
$dtVNTz = Carbon::createFromDate(2016, 1, 1, 'Asia/Ho_Chi_Minh');
$dtTokyoTz = Carbon::createFromDate(2016, 1, 1, 'Asia/Tokyo');

// Tạo 1 đối tượng có giá trị giống hệt với đối tượng ban đầu:
$dt = Carbon::now();
echo $dt->diffInYears($dt->copy()->addYear());  // 1

// Khởi tạo giá trị datetime lớn nhất và nhỏ nhất
Carbon::maxValue(); // '2038-01-18 22:14:07'
Carbon::minValue(); // '1901-12-13 15:45:52'

// Hiển thị theo ngôn ngữ:
Carbon::setLocale('vi');
echo Carbon::now()->addYear()->diffForHumans();    // in 1 Jahr

// Testing
$testDate = Carbon::createfromDate(2016, 03, 26);
Carbon::setTestNow($testDate);  // set the mock
echo Carbon::now();             // 2016-03-26 00:00:00
echo new Carbon();              // 2016-03-26 00:00:00
var_dump(Carbon::hasTestNow()); // bool(true)
Carbon::setTestNow();           // clear the mock
var_dump(Carbon::hasTestNow()); // bool(false)
echo Carbon::now();             // today

// Getet - Hàm lấy thông số thông dụng, trả về integer:
$now = Carbon::now();
$now->year;
$now->month;
$now->day;
$now->hour;
$now->minute;
$now->second;
$now->micro;
$now->dayOfWeek;
$now->dayOfYear;
$now->weekOfMonth;
$now->weekOfYear;
$now->daysInMonth;
$now->timestamp;

// Setter các hàm thiết lập tham số 
$dt = Carbon::now();
$dt->year = 1975;
$dt->month = 13; // year = year + 1, month = month - 12
$dt->month = 5;
$dt->day = 21;
$dt->hour = 22;
$dt->minute = 32;
$dt->second = 5;
$dt->timestamp = 169957925;  // Không thay đổi timezone
// Set timezone thông qua DateTimeZone hoặc string
$dt->timezone = new DateTimeZone('Europe/London');
$dt->timezone = 'Europe/London';
$dt->tz = 'Europe/London';

// Thiết lập có đối số:
$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();
$dt->timestamp(169957925)->timezone('Europe/London');
$dt->tz('America/Toronto')->setTimezone('America/Vancouver');

// Isset validate các thuộc tính trong Carbon
var_dump(isset(Carbon::now()->iDoNotExist)); // bool(false)
var_dump(isset(Carbon::now()->hour));        // bool(true)
var_dump(empty(Carbon::now()->iDoNotExist)); // bool(true)
var_dump(empty(Carbon::now()->year));        // bool(false)

// Định dạng chuỗi datetime_
$dt = Carbon::create(1975, 12, 25, 14, 15, 16);
var_dump($dt->toDateTimeString() == $dt);// bool(true) => uses __toString()
echo $dt->toDateString();                // 1975-12-25
echo $dt->toFormattedDateString();       // Dec 25, 1975
echo $dt->toTimeString();                // 14:15:16
echo $dt->toDateTimeString();            // 1975-12-25 14:15:16
echo $dt->toDayDateTimeString();         // Thu, Dec 25, 1975 2:15 PM

// Một số định dạng phổ biến
$dt = Carbon::now();
// $dt->toAtomString() is the same as $dt->format(DateTime::ATOM);
echo $dt->toAtomString();      // 1975-12-25T14:15:16-05:00
echo $dt->toCookieString();    // Thursday, 25-Dec-1975 14:15:16 EST
echo $dt->toIso8601String();   // 1975-12-25T14:15:16-0500
echo $dt->toRfc822String();    // Thu, 25 Dec 75 14:15:16 -0500
echo $dt->toRfc850String();    // Thursday, 25-Dec-75 14:15:16 EST
echo $dt->toRfc1036String();   // Thu, 25 Dec 75 14:15:16 -0500
echo $dt->toRfc1123String();   // Thu, 25 Dec 1975 14:15:16 -0500
echo $dt->toRfc2822String();   // Thu, 25 Dec 1975 14:15:16 -0500
echo $dt->toRfc3339String();   // 1975-12-25T14:15:16-05:00
echo $dt->toRssString();       // Thu, 25 Dec 1975 14:15:16 -0500
echo $dt->toW3cString();       // 1975-12-25T14:15:16-05:00

// So sánh 2 giá trị datetime
$first = Carbon::create(2016, 03, 26, 01, 02, 03);
$second = Carbon::create(2016, 03, 26, 20, 02, 03);
var_dump($first->eq($second));   // bool(false)
var_dump($first->ne($second));   // bool(true)
var_dump($first->gt($second));   // bool(false)
var_dump($first->gte($second));  // bool(false)
var_dump($first->lt($second));   // bool(true)
var_dump($first->lte($second));  // bool(true)

// So sánh 1 giá trị với 2 giá trị datetime khác
$first = Carbon::create(2016, 03, 26, 01);
$second = Carbon::create(2016, 03, 26, 05);
var_dump(Carbon::create(2016, 03, 26, 03)->between($first, $second));          // bool(true)
var_dump(Carbon::create(2016, 03, 26, 05)->between($first, $second));          // bool(true)
var_dump(Carbon::create(2016, 03, 26, 05)->between($first, $second, false));   // bool(false)
// So sánh max, min
php
$dt1 = Carbon::create(2016, 03, 26, 0, 0, 0);
$dt2 = Carbon::create(2016, 03, 30, 0, 0, 0);
echo $dt1->min($dt2);  // 2016-03-26 00:00:00
echo $dt1->max($dt2);  // 2016-03-30 00:00:00
echo $dt1->max();      // now()

// So sánh với now()
$dt = Carbon::now();
$dt->isWeekday();
$dt->isWeekend();
$dt->isYesterday();
$dt->isToday();
$dt->isTomorrow();
$dt->isFuture();
$dt->isPast();
$dt->isLeapYear();
$dt->isSameDay(Carbon::now());
$born = Carbon::createFromDate(1987, 4, 23);
$noCake = Carbon::createFromDate(2014, 9, 26);
$yesCake = Carbon::createFromDate(2014, 4, 23);
$overTheHill = Carbon::now()->subYears(50);
var_dump($born->isBirthday($noCake));   // bool(false)
var_dump($born->isBirthday($yesCake));  // bool(true)
var_dump($overTheHill->isBirthday());   // bool(true) -> default compare it to today!

// Cộng trừ với Datetime
$dt = Carbon::create(2012, 1, 31, 0);
echo $dt->toDateTimeStri// 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

// Tính toán sự sai khác giữa 2 giá trị datetime
diffInSeconds()
diffInMinutes()
diffInHours()
diffInDays()
diffInYears()
diffInMonths()
diffInWeeks()
diffInWeekdays()
diffInWeekendDays()
diffInDaysFiltered()
diffInHoursFiltered()
diffFiltered()
// Ví dụ:
$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::create(2014, 1, 1);
$dt2 = Carbon::create(2014, 12, 31);
$daysForExtraCoding = $dt->diffInDaysFiltered(function(Carbon $date) {
   return $date->isWeekend();
}, $dt2);

echo $daysForExtraCoding;      // 104

$dt = Carbon::create(2014, 1, 1)->startOfDay();
$dt2 = $dt->copy()->endOfDay();
$littleHandRotations = $dt->diffFiltered(CarbonInterval::minute(), function(Carbon $date) {
   return $date->minute === 0;
}, $dt2);

echo $littleHandRotations;     // 24

// Hiển thị thời gian tương đối
$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[/code]

// Modify
$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfDay();                            // 2012-01-31 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfDay();                              // 2012-01-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfMonth();                          // 2012-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfMonth();                            // 2012-01-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfYear();                           // 2012-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfYear();                             // 2012-12-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfDecade();                         // 2010-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfDecade();                           // 2019-12-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfCentury();                        // 2000-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfCentury(); 
                         // 2099-12-31 23:59:59

// Hằng số

var_dump(Carbon::SUNDAY);                          // int(0)
var_dump(Carbon::MONDAY);                          // int(1)
var_dump(Carbon::TUESDAY);                         // int(2)
var_dump(Carbon::WEDNESDAY);                       // int(3)
var_dump(Carbon::THURSDAY);                        // int(4)
var_dump(Carbon::FRIDAY);                          // int(5)
var_dump(Carbon::SATURDAY);                        // int(6)

var_dump(Carbon::YEARS_PER_CENTURY);               // int(100)
var_dump(Carbon::YEARS_PER_DECADE);                // int(10)
var_dump(Carbon::MONTHS_PER_YEAR);                 // int(12)
var_dump(Carbon::WEEKS_PER_YEAR);                  // int(52)
var_dump(Carbon::DAYS_PER_WEEK);                   // int(7)
var_dump(Carbon::HOURS_PER_DAY);                   // int(24)
var_dump(Carbon::MINUTES_PER_HOUR);                // int(60)
var_dump(Carbon::SECONDS_PER_MINUTE);              // int(60)

// CarbonInterval

class CarbonInterval extends \DateInterval
{
    // code here
}
?>

 


Xem thêm

   Giải đáp các thắc mắc về lập trình ngôn ngữ C# và PHP

   Thiết kế web chuẩn SEO là gì?

   8 cách để cải thiện thiết kế website của bạn

   Ưu và nhược điểm của website miễn phí là gì? Có nên dùng miễn phí không?

   7 Xu Hướng Thiết Kế Website sẽ "lên ngôi" Trong Năm 2020

   HTML là gì? Tìm hiểu những yếu tố cơ bản về HTML

   Tìm hiểu sơ lược thành phần một web HTML động

   Tôi đã học lập trình như thế nào?

   So sánh giữa hai công nghệ xây dựng website: PHP và ASP.NET

   11 xu hướng thiết kế web trong năm 2019

   GIS là gì? Thành phần, chức năng, nhiệm vụ và ứng dụng của công nghệ GIS

   Bạn sẽ chọn ngành nào phù hợp với lĩnh vực Công nghệ Thông tin?

   Bạn hiểu thế nào là nghề lập trình? bước vào nghề lập trình phải học những gì?

Dịch vụ thiết kế slide powerpoint

Xem nhiều nhất

   Giáo trình hướng dẫn Microsoft PowerPoint 2016 từ cơ bản đến nâng cao

   Chia sẻ Full bộ lịch âm dương 2019 vector - File PNG, JPEG và AI (Adobe Illustrator)

   Thiết kế trò chơi ô chữ trong powerpoint (download miễn phí)

   Hệ thống bài giảng e-Learning lớp Ứng dụng CNTT và các phần mềm vào đổi mới phương pháp dạy và học

   Thiết lập hiệu ứng trống đồng quay trong Microsoft PowerPoint

   Trọn bộ Giáo trình Microsoft Word 2016 từ cơ bản đến nâng cao

   Sửa lỗi virus quảng cáo http://hi.gt/?md81 trong Chrome khi khởi động trình duyệt này và một số trình duyệt khác

   Thực hành biên tập, thiết kế, chỉnh sửa Videos bằng Adobe Premiere

   Hướng dẫn sử dụng phần mềm bảng tương tác thông minh ActivInspire

   Xây dựng Website tin tức bằng PHP và MySql theo phương pháp lập trình hướng đối tượng (mysqli Object Oriented)

   Cài đặt và sử dụng tính năng mới của Office 365 trên Office 2016

   Thủ thuật đổi đơn vị đo từ Inch sang cm trong Microsoft Powerpoint 2016

   Tìm hiểu về Thư viện DateTime Carbon trong Laravel

   Hướng dẫn thu âm, chỉnh sửa âm thanh, tăng giảm tone nhạc bằng phần mềm Adobe Audition CC

   Thực hành sử dụng phần mềm thiết kế đồ họa Adobe Illustrator

   Thiết kế mẫu mục lục chuyên nghiệp trong Powerpoint