Đào tạo Tin học Trực tuyến

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


Cập nhật: 7 tháng trước
Bài viết ngẫu nhiên:

   XD phần mềm Quản lý điểm: Bài 15. Hoàn thiện phần mềm Giới thiệu demo hoàn chỉnh

   Cài đặt và Cấu hình Laragon - Server ảo chuyên nghiệp cho PHP và MySql

   XD phần mềm quản lý điểm: Bài 13. Xử lý ngoại lệ, thêm các bảng thông báo và xử lý điểm nhập vào

   Laravel 5.6: Thiết kế trang đăng ký người dùng

   Lập trình Website: Thực hành biên tập, soạn thảo HTML và CSS cơ bản

   Tìm hiểu Validation trong Laravel


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

   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 thì phải học những gì?

   Lập trình máy tính là gì? Các ngôn ngữ lập trình, phát triển phần mềm

   Tại sao bạn phải hiểu và có kỹ năng về lập trình hướng đối tượng?

   Xử lý hình ảnh (images) với Bootstrap CSS FrameWork phiên bản 4.x

   Để học lập trình bạn nên lựa chọn ngôn ngữ lập trình nào?

   Top 25 bài giảng có số lượt xem cao nhất thời điểm hiện tại

   Có gì khác biệt giữa HTML và HTML5?

   5 yếu tố quan trọng của định hướng thị giác trong thiết kế web

   Một số thẻ và Type quan trọng với HTML5 cần chú ý trong quá trình thiết kế website

   Xử lý text với Typography trong Bootstrap 4 CSS FrameWork

   Bootstrap 4.0: Bài 2. Thiết lập hệ thống lưới Grid System

   Bootstrap 4.0: Bài 1. Giới thiệu và các thiết lập cơ bản về công cụ, css, javascript

Xem nhiều nhất

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

   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

   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

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

   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)

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

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

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

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

   Tạo câu hỏi trắc nghiệm với siêu liên kết (hyperlink) và Trigger với PowerPoint 2016

   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

   Bài giảng Microsoft PowerPoint 2013 và 2016 từ cơ bản đến nâng cao

   Dòng chữ chạy liên tục từ trái qua phải và đồng hồ đếm ngược trong PowerPoint

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

   Full Download phần mềm biên soạn bài giảng e-Learning iSpring Sute phiên bản 8.1