文章轉自: https://learnku.com/php/t/26998
在 PHP 中使用日期和時間並非容易或清晰的任務。咱們必須處理 strtotime
,格式化問題,大量計算等等。php
這個漂亮的包叫作 Carbon 能夠幫助在 PHP 開發中處理日期/時間變得更加簡單、更語義化,從而使得咱們的代碼更容易閱讀和維護。laravel
Carbon 是由 Brian Nesbit 開發的一個包,它擴展了 PHP 本身的 DateTime 類。git
它提供了一些很好的功能來處理 PHP 中的日期,特別是諸如:github
全部的這些都帶來了一個很是有用的包,使得這些在 PHP 中處理時間很是容易。api
爲了使用 Carbon ,你須要從 Carbon
命名空間中導入 Carbon 。幸運的是,在 Laravel 中已經包括了 Carbon ,因此不須要和 Composer 一塊兒添加。網絡
當咱們須要使用 Carbon 的時候,咱們能夠這樣導入它:composer
<?php use Carbon\Carbon;
在導入以後,讓咱們看看咱們能夠用這個很棒的包作一些很酷的事情。ui
// 獲取當前時間 - 2015-12-19 10:10:54 $current = Carbon::now(); $current = new Carbon(); // 獲取今天 - 2015-12-19 00:00:00 $today = Carbon::today(); // 獲取昨天 - 2015-12-18 00:00:00 $yesterday = Carbon::yesterday(); // 獲取明天 - 2015-12-20 00:00:00 $tomorrow = Carbon::tomorrow(); // 解析特定字符串 - 2016-01-01 00:00:00 $newYear = new Carbon('first day of January 2016'); // 設定一個特定的時區 - 2016-01-01 00:00:00 $newYearPST = new Carbon('first day of January 2016', 'America\Pacific');
除了快速定義日期/時間方法以外,Carbon 也可讓咱們從特定數量的參數中建立時間。spa
Carbon::createFromDate($year, $month, $day, $tz); Carbon::createFromTime($hour, $minute, $second, $tz); Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
當你以一種一般不被 Carbon 識別的格式得到某種日期或時間時,這些是很是有用的。若是你爲任何一個參數傳遞 null
值,則它默認會使用當前日期/時間傳遞 。.net
抓取日期/時間並非你在處理日期時惟一要作的事情。你常常須要操做日期或時間。
例如,當爲一個用戶建立一個試用期時,你將但願試用期在必定時間後過時。假設咱們有 30 天的試用期。咱們能夠用 add
和 subtract
很容易的計算出時間。
在這段試用期內,咱們會:
// 獲取當前時間 $current = Carbon::now(); // 添加 30 天到當前時間 $trialExpires = $current->addDays(30);
從 Carbon 文檔 中,咱們能夠找到一些其餘的 add()
和 sub()
方法:
$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
另一種快速操做或讀取時間的方法是使用可用的 getters 和 serrers 。
$dt = Carbon::now(); // 設置一些參數 $dt->year = 2015; $dt->month = 04; $dt->day = 21; $dt->hour = 22; $dt->minute = 32; $dt->second = 5; // 獲取一些參數 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);
咱們甚至還能夠把一些 setter 串在一塊兒。
$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();
在上面的示例中,你可能注意到了 ->toDateTimeString()
方法。咱們能夠方便的爲達到咱們的目的去進行格式化。在這種狀況下,咱們獲得了一個日期時間字符串。
$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 // ……固然 format() 也能夠這樣用 echo $dt->format('l jS \\of F Y h:i:s A'); // Saturday 19th of December 2015 10:10:16 AM
經過 diff()
方法能夠很容易的顯示相對時間。
例如,咱們有一篇博客,而且咱們想顯示它是在 三小時 前發佈的。能夠利用這些方法。
這些方法用於求兩個時間的時間差。
$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
在過去的幾年,顯示相對時間變得愈來愈流行。在 Twitter 和 Facebook 等社交網絡中常常能夠看到。
例如,將時間顯示爲 3 小時前 比顯示 上午 8:12,更適合人類閱讀。
這些方法被用於計算時間差,並轉換爲人類可閱讀的格式。
這裏有四種表達時間差的方式:
將一個過去的時間和如今作比較:
將一個將來的時間和如今作比較:
將一個過去的時間和另外一個時間作比較:
將一個將來的時間和另外一個作比較:
$dt = Carbon::now(); $past = $dt->subMonth(); $future = $dt->addMonth(); echo $dt->subDays(10)->diffForHumans(); // 10 天前 echo $dt->diffForHumans($past); // 1 個月前 echo $dt->diffForHumans($future); // 1 個月前
Carbon 能作的遠遠不止這些。請務必查看 Carbon 官方文檔。但願這能幫助你在 PHP 中更容易的使用日期 / 時間並加快開發效率!
文章轉自: https://learnku.com/php/t/26998
更多文章: https://learnku.com/laravel/c...