laravel 中的carbon

<?php
namespace Carbon;

class Carbon extends \DateTime
{
// code here
}
你可以在 Carbon 命名空間的 Carbon 類中看到上面聲明的代碼片段。

安裝
可以通過(guò) Composer 來(lái)安裝 Carbon:

composer require nesbot/carbon
PS:由于 Laravel 項(xiàng)目已默認(rèn)安裝了此包录粱,所以不需要再次執(zhí)行上面的命令啥繁。

使用
你需要通過(guò)命名空間導(dǎo)入 Carbon 來(lái)使用,而不需每次都提供完整的名稱青抛。

use Carbon\Carbon;
獲取當(dāng)前時(shí)間
可以同 now() 方法獲取當(dāng)前的日期和時(shí)間旗闽。如果你不指定參數(shù),它會(huì)使用 PHP 配置中的時(shí)區(qū):

<?php
echo Carbon::now(); //2016-10-14 20:21:20
?>
如果你想使用一個(gè)不同的時(shí)區(qū),你需要傳遞一個(gè)有效的時(shí)區(qū)作為參數(shù):

// 直接使用字符串
echo Carbon::now('Europe/London'); //2016-10-14 20:21:20
// 或者
echo Carbon::now(new DateTimeZone('Europe/London'));
除 now() 外宪睹,還提供了 today()、tomorrow()蚕钦、yesterday() 等靜態(tài)函數(shù)亭病,不過(guò),它們的時(shí)間都是 00:00:00 :

echo Carbon::now(); // 2016-10-14 15:18:34
echo Carbon::today(); // 2016-10-14 00:00:00
echo Carbon::tomorrow('Europe/London'); // 2016-10-14 00:00:00
echo Carbon::yesterday(); // 2016-10-14 00:00:00
以上輸出結(jié)果其實(shí)是一個(gè) Carbon 類型的日期時(shí)間對(duì)象:

Carbon {#179 ?
+"date": "2016-06-14 00:00:00.000000"
+"timezone_type": 3
+"timezone": "UTC"
}
要想獲取字符串類型的日期嘶居,可以使用下面的代碼:

echo Carbon::today()->toDateTimeString();
echo Carbon::yesterday()->toDateTimeString();
echo Carbon::tomorrow()->toDateTimeString();
日期類型轉(zhuǎn)為字符串
如上所述罪帖,默認(rèn)情況下嗡官,Carbon 的方法返回的為一個(gè)日期時(shí)間對(duì)象芋忿。雖然它是一個(gè)對(duì)象,但是你卻可以直接使用 echo 輸出結(jié)果,因?yàn)橛?__toString 魔術(shù)方法。但是如果你想把它轉(zhuǎn)為字符串田轧,可以使用 toDateString 或 toDateTimeString 方法:

echo Carbon::now()->toDateString(); //2016-10-14
echo Carbon::now()->toDateTimeString(); //2016-10-14 20:22:50
日期解析
你還可以使用 parse 方法解析任何順序和類型的日期(結(jié)果為 Carbon 類型的日期時(shí)間對(duì)象):

echo Carbon::parse('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse('2016-10-15 00:10:25')->toDateTimeString(); //2016-10-15 00:10:25

echo Carbon::parse('today')->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse('yesterday')->toDateTimeString(); //2016-10-14 00:00:00
echo Carbon::parse('tomorrow')->toDateTimeString(); //2016-10-16 00:00:00
echo Carbon::parse('2 days ago')->toDateTimeString(); //2016-10-13 20:49:53
echo Carbon::parse('+3 days')->toDateTimeString(); //2016-10-18 20:49:53
echo Carbon::parse('+2 weeks')->toDateTimeString(); //2016-10-29 20:49:53
echo Carbon::parse('+4 months')->toDateTimeString(); //2017-02-15 20:49:53
echo Carbon::parse('-1 year')->toDateTimeString(); //2015-10-15 20:49:53
echo Carbon::parse('next wednesday')->toDateTimeString(); //2016-10-19 00:00:00
echo Carbon::parse('last friday')->toDateTimeString(); //2016-10-14 00:00:00
構(gòu)造日期
你還可以使用單獨(dú)的年月日來(lái)構(gòu)造日期:

$year = '2015';
$month = '04';
$day = '12';

echo Carbon::createFromDate($year, $month, $day); //2015-04-12 20:55:59

$hour = '02';
$minute = '15':
$second = '30';

echo Carbon::create($year, $month, $day, $hour, $minute, $second); //2015-04-12 02:15:30

echo Carbon::createFromDate(null, 12, 25); // 年默認(rèn)為當(dāng)前年份
此外稽莉,還可以傳遞一個(gè)有效的時(shí)區(qū)作為最后一個(gè)參數(shù)。

日期操作
日期操作可以通過(guò) add (增加)或 sub (減去)跟上要增加或減去的單位來(lái)完成。例如,你想給一個(gè)日期增加指定的天數(shù),你可以使用 addDays 方法。此外還提供了一個(gè) modify 方法,參數(shù)格式為 + 或 - 跟上值及單位垢袱。所以夏醉,如果你想給當(dāng)前日期增加一年,你可以傳遞 +1 year:

echo Carbon::now()->addDays(25); //2016-11-09 14:00:01
echo Carbon::now()->addWeeks(3); //2016-11-05 14:00:01
echo Carbon::now()->addHours(25); //2016-10-16 15:00:01
echo Carbon::now()->subHours(2); //2016-10-15 12:00:01
echo Carbon::now()->addHours(2)->addMinutes(12); //2016-10-15 16:12:01
echo Carbon::now()->modify('+15 days'); //2016-10-30 14:00:01
echo Carbon::now()->modify('-2 days'); //2016-10-13 14:00:01
日期比較
在 Carbon 中你可以使用下面的方法來(lái)比較日期:

min –返回最小日期玄捕。
max – 返回最大日期。
eq – 判斷兩個(gè)日期是否相等局骤。
gt – 判斷第一個(gè)日期是否比第二個(gè)日期大。
lt – 判斷第一個(gè)日期是否比第二個(gè)日期小。
gte – 判斷第一個(gè)日期是否大于等于第二個(gè)日期狮腿。
lte – 判斷第一個(gè)日期是否小于等于第二個(gè)日期贴硫。
echo Carbon::now()->tzName; // America/Toronto
$first = Carbon::create(2012, 9, 5, 23, 26, 11);
$second = Carbon::create(2012, 9, 5, 20, 26, 11, 'America/Vancouver');

echo $first->toDateTimeString(); // 2012-09-05 23:26:11
echo $first->tzName; // America/Toronto
echo $second->toDateTimeString(); // 2012-09-05 20:26:11
echo $second->tzName; // America/Vancouver

var_dump($first->eq($second)); // bool(true)
var_dump($first->ne($second)); // bool(false)
var_dump($first->gt($second)); // bool(false)
var_dump($first->gte($second)); // bool(true)
var_dump($first->lt($second)); // bool(false)
var_dump($first->lte($second)); // bool(true)

$first->setDateTime(2012, 1, 1, 0, 0, 0);
$second->setDateTime(2012, 1, 1, 0, 0, 0); // Remember tz is 'America/Vancouver'

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)
要判斷一個(gè)日期是否介于兩個(gè)日期之間多律,可以使用 between() 方法,第三個(gè)可選參數(shù)指定比較是否可以相等,默認(rèn)為 true:

$first = Carbon::create(2012, 9, 5, 1);
$second = Carbon::create(2012, 9, 5, 5);
var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second)); // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second)); // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false)); // bool(false)
此外還提供了一些輔助方法此再,你可以從它們的名字中明白其含義:

$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!
diffForHumans
“一個(gè)月前”比“30 天前”更便于閱讀,很多日期庫(kù)都提供了這個(gè)常見(jiàn)的功能阳堕,日期被解析后,有下面四種可能性:

當(dāng)比較的時(shí)間超過(guò)當(dāng)前默認(rèn)時(shí)間
1天前
5月前
當(dāng)用將來(lái)的時(shí)間與當(dāng)前默認(rèn)時(shí)間比較
1小時(shí)距現(xiàn)在
5月距現(xiàn)在
當(dāng)比較的值超過(guò)另一個(gè)值
1小時(shí)前
5月前
當(dāng)比較的值在另一個(gè)值之后
1小時(shí)后
5月后
你可以把第二個(gè)參數(shù)設(shè)置為 true 來(lái)刪除“前”目木、“距現(xiàn)在”等修飾語(yǔ):diffForHumans(Carbon $other, true)肾档。

echo Carbon::now()->subDays(5)->diffForHumans(); // 5天前
echo Carbon::now()->subDays(5)->format('Y-m-d'); // 5天前

echo Carbon::now()->diffForHumans(Carbon::now()->subYear()); // 1年后

$dt = Carbon::createFromDate(2011, 8, 1);

echo $dt->diffForHumans($dt->copy()->addMonth()); // 1月前
echo $dt->diffForHumans($dt->copy()->subMonth()); // 11月后

echo Carbon::now()->addSeconds(5)->diffForHumans(); // 5秒距現(xiàn)在
echo Carbon::now()->addSeconds(5)->format(); // 5秒距現(xiàn)在

echo Carbon::now()->subDays(24)->diffForHumans(); // 3周前
echo Carbon::now()->subDays(24)->diffForHumans(null, true); // 3周

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市告喊,隨后出現(xiàn)的幾起案子淮椰,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異珊楼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)膜楷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)匈勋,“玉大人,你說(shuō)我怎么就攤上這事烛卧。” “怎么了宫盔?”我有些...
    開(kāi)封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵热某,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我秘遏,道長(zhǎng)陵且,這世上最難降的妖魔是什么慕购? 我笑而不...
    開(kāi)封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任昌妹,我火速辦了婚禮固歪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晦墙。我一直安慰自己谓谦,他們只是感情好贫橙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著反粥,像睡著了一般卢肃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上才顿,一...
    開(kāi)封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天莫湘,我揣著相機(jī)與錄音,去河邊找鬼郑气。 笑死幅垮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尾组。 我是一名探鬼主播忙芒,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼讳侨!你這毒婦竟也來(lái)了呵萨?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤跨跨,失蹤者是張志新(化名)和其女友劉穎潮峦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體勇婴,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忱嘹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咆耿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片德谅。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爹橱,死狀恐怖萨螺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愧驱,我是刑警寧澤慰技,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站组砚,受9級(jí)特大地震影響吻商,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糟红,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一艾帐、第九天 我趴在偏房一處隱蔽的房頂上張望乌叶。 院中可真熱鬧,春花似錦柒爸、人聲如沸准浴。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乐横。三九已至,卻和暖如春今野,著一層夾襖步出監(jiān)牢的瞬間葡公,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工条霜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留催什,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓宰睡,卻偏偏與公主長(zhǎng)得像蛆楞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夹厌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容