Carbon - 賦予yii2強大的時間操做能力

能將一個時間庫作到在github上8000+星星、各大PHP框架內置採用,無不體現Carbon過人之處。php

阿北將盡可能使用最通俗的語言帶你入門,本教程使用carbon版本爲1.25.0,運行環境以下:git

  • PHP7.1.8(carbon最低版本要求爲5.3)
  • Yii2.0.14(做爲carbon演示程序,非必須)
  • Nginx

安裝它

Carbon支持人工安裝和composer安裝。github

composer安裝

這個最簡單,使用下面代碼便可完成。數據庫

composer require nesbot/carbon
複製代碼

這個擴展會有兩個擴展包被下載下來,vendor目錄中能夠找到它們。yii2

人工安裝

我並不推薦這樣作,若是非要不可,請以下步驟app

一、下載Carbon.php文件 到你程序的任何位置。composer

https://github.com/briannesbitt/Carbon/blob/master/src/Carbon/Carbon.php框架

二、開始使用 引入咱們剛剛下載的Carbon.php文件。yii

require 'path/to/Carbon.php';

use Carbon\Carbon;
echo Carbon::now();
複製代碼

開始使用

Carbon在咱們操做時間時更加語義化,它提供了一些對象方法和一些靜態方法,爲了講解方便,咱們採用問答式。ui

得到當前時間

在php裏咱們能夠經過date方法構造,並輸入咱們想要的格式,而在Carbon則以下

Carbon::now();//2018-03-27 21:52:45
Carbon::now('Europe/London');//你也能夠指定時區
複製代碼

固然你也能夠輕鬆獲取時區

Carbon::now()->tzName;// Asia/Shanghai
複製代碼

既然有now(),天然Carbon還很貼心的支持如下靜態方法

Carbon::today();// 2018-03-27 00:00:00
Carbon::tomorrow();//2018-03-28 00:00:00
Carbon:: yesterday();//2018-03-26 00:00:00
複製代碼

和now()同樣,你能夠爲其傳入時區參數。

某個時間點

咱們還能夠爲上面的now()這樣的方法添加細節,好比我想得到昨天早上8點的時間值。

Carbon::yesterday()->addHours(8);//2018-03-26 08:00:00
Carbon::yesterday()->addHours(8)->addMinutes(29);//2018-03-26 08:29:00
Carbon::yesterday()->addHours(8)->addMinutes(29)->addSeconds(19);//2018-03-26 08:29:19
複製代碼

做爲一名phper,咱們總喜歡將時間轉化爲時間戳後存入數據庫,用Carbon很簡單

Carbon::yesterday()->addHours(8)->timestamp;
複製代碼

輕鬆拿到時間戳。

此刻是將來仍是過去?

在這個世界上有不少日子是值得記住的,好比生日、好比周6、好比將來等等,考慮到這樣的需求,Carbon規劃了以下方法。

  • isWeekday
  • isWeekend
  • isYesterday
  • isToday
  • isTomorrow
  • isNextWeek
  • isLastWeek
  • isNextMonth
  • isLastMonth
  • isNextYear
  • isLastYear
  • isFuture
  • isPast
  • isLeapYear
  • isLongYear
  • isSameAs
  • isCurrentYear
  • isSameYear
  • isCurrentMonth
  • isSameMonth
  • isSameDay
  • isDayOfWeek
  • isSunday
  • isMonday
  • isTuesday
  • isWednesday
  • isThursday
  • isFriday
  • isSaturday

大多數能夠看懂,有些特殊的說明下

  • isFuture 未來
  • isPast 過去
  • isLeapYear 閏年

海納百川

咱們剛剛是經過一些時刻生成了Carbon對象,好比now、today等,除了這些Carbon還能夠包容其餘來源,好比下面的

Carbon::createFromDate($year, $month, $day, $tz);
Carbon::createFromTime($hour, $minute, $second, $tz);
Carbon::createFromTimeString("$hour:$minute:$second", $tz);
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
複製代碼

$tz表明時區。

還有一個咱們老喜歡的 從時間戳得到時間。

Carbon::createFromTimestamp(time())->addHours(-1);//得到一個小時前的時間點
複製代碼

注意,針對於addHours等方法,你能夠填寫複數表明以前,是否是和咱們腦子裏想的同樣同樣的。

解析時間

上面都是經過其餘形式得到時間,還有一種就是經過解析傳遞的時間來獲取Carbon對象而後進一步操做,好比

Carbon::parse("2018-03-27")->addHours(-1);// 2018-03-26 23:00:00
複製代碼

還支持一些語言內容first day of January 2008

Carbon::parse("first day of January 2008")->addHours(-1);
複製代碼

是否是很聰明。

3秒前

還有種常常用的時間格式就是5小時前、4秒前這種,固然在yii2中有 Yii::$app->formatter->asRelativeTime() 能夠達到這個目的,使用Carbon那?

Carbon::now()->diffForHumans();// 1 second ago
複製代碼

呀,怎麼仍是英文那?別怕,咱們支持當地語言包,以下。

Carbon::setLocale('zh');
Carbon::now()->diffForHumans();// 1秒前
複製代碼

迄今爲止,Carbon一共支持64種語言。

針對於diffForHumans還支持一些參數配置,咱們會在Carbon速查表中給出。

格式化

針對於一個時間,Carbon容許咱們不一樣的格式化、不一樣的輸出,好比下面的代碼

$dt = Carbon::create(1975, 12, 25, 14, 15, 16);

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
複製代碼

而且Carbon還提供了一個通用方法

$dt->format("Y-m-d H:i:s")
複製代碼

判斷是否符合(重點)

有時候咱們須要判斷用戶輸入的值是不是咱們要的時間格式,能夠用Carbon提供的hasFormat方法。

$dt->hasFormat('2018-03-03', 'Y-m-d');//false
複製代碼

返回真假。

區間判斷

有時候咱們須要判斷用戶輸入的時間是否在指定的時間範圍內,用Carbon輕鬆完成。

Carbon::parse($date)->between($first, $second);// true / false
複製代碼

這裏要注意first和second也是Carbon對象。

小結

以上就是Carbon一些經常使用方法,固然還有不少不經常使用的,具體你們能夠去源文件Carbon.php中看看,這個庫的目錄結構很簡單,就是方法繁多。

另外這段時間我會抽空整理出Carbon的速查表,發佈後你能夠一鍵速查。

相關連接

  • 官方地址 http://carbon.nesbot.com

阿北的知識分享 https://nai8.me

相關文章
相關標籤/搜索