Carbon

介紹

Carbon 類繼承了PHP DateTime
類另凌。完整的 Carbon 請看 傳送門

<?php
namespace Carbon;

class Carbon extends \DateTime
{
    // code here
}

使用

  1. Carbon::parse() 解析 DateTime 默認(rèn)顯示當(dāng)前時間捞魁,可傳入時間格式字符串
  • Carbon::setLocale('de'); 設(shè)置時區(qū) 中國就是 'zh'
    echo Carbon::now()->addYear()->diffForHumans(); // in 1 Jahr

  • Carbon::now(); 參數(shù)傳時區(qū)娃善,默認(rèn)是本地設(shè)置的時區(qū)

  • Carbon::setTestNow($knownDate); 設(shè)置模式翔试,設(shè)置好后厦幅,Carbon::now() 就是設(shè)置的時間值

  • Carbon::parse('first day of March 2000') 參數(shù)類似
    first day of December 2000
    first day of this month
    last day of next month
    first day of previous month

  • 還可以這樣玩
    echo new Carbon('tomorrow'); // 2001-05-22 00:00:00 ... notice the time !
    echo new Carbon('yesterday'); // 2001-05-20 00:00:00
    echo new Carbon('next wednesday'); // 2001-05-23 00:00:00
    echo new Carbon('last friday'); // 2001-05-18 00:00:00
    echo new Carbon('this thursday'); // 2001-05-24 00:00:00

  • 獲取時區(qū)
    echo Carbon::now()->timezoneName; // America/Toronto
    echo Carbon::now()->tzName; // America/Toronto

  • DateTime類舌缤。這些結(jié)果都可以用 Carbon::parse() 解析出來

$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
  • 一些簡單的判斷瓣距,返回 true or false
$dt = Carbon::now();
echo $dt->isWeekday(); // 是不是周末
echo $dt->isWeekend(); // 是不是工作日
echo $dt->isYesterday();   //是不是昨天
echo $dt->isToday();   // 是不是今天
echo $dt->isTomorrow(); // 明天
echo $dt->isFuture(); // 未來黔帕,只要時間比現(xiàn)在晚不管是明天后天都是true
echo $dt->isPast();    // 過去,時間比現(xiàn)在早都是true
echo $dt->isLeapYear(); // 閏年
  • 比較兩個時間的大小
// 取 min
$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);
$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);
echo $dt1->min($dt2);                              // 2012-01-01 00:00:00
// 取 max
$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);
$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);
echo $dt1->max($dt2);                              // 2014-01-30 00:00:00
// now is the default param 默認(rèn)當(dāng)前時間
$dt1 = Carbon::create(2000, 1, 1, 0, 0, 0);
echo $dt1->max();     
  • 加法和減法
$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
  • 比較兩個時間的差值
echo Carbon::now('America/Vancouver')->diffInSeconds(Carbon::now('Europe/London')); // 0
// 創(chuàng)建時間
$dtOttawa = Carbon::createFromDate(2000, 1, 1, 'America/Toronto');
$dtVancouver = Carbon::createFromDate(2000, 1, 1, 'America/Vancouver');
echo $dtOttawa->diffInHours($dtVancouver);                             // 3
// 相差幾小時
echo $dtOttawa->diffInHours($dtVancouver, false);                      // 3 第二個參數(shù)是可選的,再次表明如果你想返回值絕對值還是相對值,可能有一個-(負(fù)面)簽署如果傳入日期小于當(dāng)前實例旨涝。 這將默認(rèn)為true,返回絕對值蹬屹。 比較是在UTC。
echo $dtVancouver->diffInHours($dtOttawa, false);                      // -3
// 相差幾天
$dt = Carbon::create(2012, 1, 31, 0);
echo $dt->diffInDays($dt->copy()->addMonth());                         // 31
echo $dt->diffInDays($dt->copy()->subMonth(), false);                  // -31
// 相差幾天
$dt = Carbon::create(2012, 4, 30, 0);
echo $dt->diffInDays($dt->copy()->addMonth());                         // 30
echo $dt->diffInDays($dt->copy()->addWeek());                          // 7
// 相差幾分鐘
$dt = Carbon::create(2012, 1, 1, 0);
echo $dt->diffInMinutes($dt->copy()->addSeconds(59));                  // 0
echo $dt->diffInMinutes($dt->copy()->addSeconds(60));                  // 1
echo $dt->diffInMinutes($dt->copy()->addSeconds(119));                 // 1
echo $dt->diffInMinutes($dt->copy()->addSeconds(120));                 // 2
// 相差幾天
echo $dt->addSeconds(120)->secondsSinceMidnight();                     // 120
  • 時間過濾
// 篩選出這段時間內(nèi)有幾個周末
$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
// 算一天分鐘數(shù)為 0 的數(shù)量(可以自定義時間間隔)
$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
// 其他的一些過濾函數(shù)
// others that are defined
// diffInYears(), diffInMonths(), diffInWeeks()
// diffInDays(), diffInWeekdays(), diffInWeekendDays()
// diffInHours(), diffInMinutes(), diffInSeconds()
// secondsSinceMidnight(), secondsUntilEndOfDay()
  • 常見的表達(dá)方法
// The most typical usage is for comments
// The instance is the date the comment was created and its being compared to default now()
echo Carbon::now()->subDays(5)->diffForHumans();               // 5 days ago
echo Carbon::now()->diffForHumans(Carbon::now()->subYear());   // 1 year after
$dt = Carbon::createFromDate(2011, 8, 1);
echo $dt->diffForHumans($dt->copy()->addMonth());              // 1 month before
echo $dt->diffForHumans($dt->copy()->subMonth());              // 1 month after
echo Carbon::now()->addSeconds(5)->diffForHumans();            // 5 seconds from now
echo Carbon::now()->subDays(24)->diffForHumans();              // 3 weeks ago
echo Carbon::now()->subDays(24)->diffForHumans(null, true);    // 3 weeks
  • 天始白华,天末 月始慨默,月末 年始,年末 一個十年始弧腥,十年末(2010-2020)
$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
//
$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfWeek();                           // 2012-01-30 00:00:00
var_dump($dt->dayOfWeek == Carbon::MONDAY);        // bool(true) : ISO8601 week starts on Monday
//
$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfWeek();                             // 2012-02-05 23:59:59
var_dump($dt->dayOfWeek == Carbon::SUNDAY);        // bool(true) : ISO8601 week ends on Sunday
//
$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->next(Carbon::WEDNESDAY);                 // 2012-02-01 00:00:00
var_dump($dt->dayOfWeek == Carbon::WEDNESDAY);     // bool(true)
//
$dt = Carbon::create(2012, 1, 1, 12, 0, 0);
echo $dt->next();                                  // 2012-01-08 00:00:00
//
$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->previous(Carbon::WEDNESDAY);             // 2012-01-25 00:00:00
var_dump($dt->dayOfWeek == Carbon::WEDNESDAY);     // bool(true)
//
$dt = Carbon::create(2012, 1, 1, 12, 0, 0);
echo $dt->previous();                              // 2011-12-25 00:00:00
// average
$start = Carbon::create(2014, 1, 1, 0, 0, 0);
$end = Carbon::create(2014, 1, 30, 0, 0, 0);
echo $start->average($end);                        // 2014-01-15 12:00:00
// 其他的函數(shù)
// others that are defined that are similar
//   firstOfMonth(), lastOfMonth(), nthOfMonth()
//   firstOfQuarter(), lastOfQuarter(), nthOfQuarter()
//   firstOfYear(), lastOfYear(), nthOfYear()
  • 時間間隔 (可以在時間過濾處使用
// 很好懂不解釋了
echo CarbonInterval::year();                           // 1 year
echo CarbonInterval::months(3);                        // 3 months
echo CarbonInterval::days(3)->seconds(32);             // 3 days 32 seconds
echo CarbonInterval::weeks(3);                         // 3 weeks
echo CarbonInterval::days(23);                         // 3 weeks 2 days
echo CarbonInterval::create(2, 0, 5, 1, 1, 2, 7);      // 2 years 5 weeks 1 day 1 hour 2 minutes 7 seconds
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厦取,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子管搪,更是在濱河造成了極大的恐慌虾攻,老刑警劉巖铡买,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異霎箍,居然都是意外死亡奇钞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門漂坏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來景埃,“玉大人,你說我怎么就攤上這事顶别」柔悖” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵驯绎,是天一觀的道長完慧。 經(jīng)常有香客問我,道長剩失,這世上最難降的妖魔是什么屈尼? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮赴叹,結(jié)果婚禮上鸿染,老公的妹妹穿的比我還像新娘。我一直安慰自己乞巧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布摊鸡。 她就那樣靜靜地躺著绽媒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪免猾。 梳的紋絲不亂的頭發(fā)上是辕,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音猎提,去河邊找鬼获三。 笑死,一個胖子當(dāng)著我的面吹牛锨苏,可吹牛的內(nèi)容都是我干的疙教。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼伞租,長吁一口氣:“原來是場噩夢啊……” “哼贞谓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起葵诈,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤裸弦,失蹤者是張志新(化名)和其女友劉穎祟同,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體理疙,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡晕城,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窖贤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片广辰。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖主之,靈堂內(nèi)的尸體忽然破棺而出择吊,到底是詐尸還是另有隱情,我是刑警寧澤槽奕,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布几睛,位于F島的核電站痴颊,受9級特大地震影響儿普,放射性物質(zhì)發(fā)生泄漏钓简。R本人自食惡果不足惜纹烹,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一逞壁、第九天 我趴在偏房一處隱蔽的房頂上張望煤篙。 院中可真熱鬧萌壳,春花似錦场梆、人聲如沸盔几。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逊拍。三九已至上鞠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芯丧,已是汗流浹背芍阎。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留缨恒,地道東北人谴咸。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像骗露,于是被迫代替她去往敵國和親岭佳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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

  • <?phpnamespace Carbon; class Carbon extends \DateTime{// ...
    金星show閱讀 4,447評論 0 3
  • 曾經(jīng)有一份美好的愛情放在我的面前我沒有珍惜玫恳。等到失去后才后悔莫及辨赐。如果可以再對小李說。毛欣想說京办。這輩子無緣再牽手掀序。...
    毛欣與小李閱讀 2,610評論 0 13
  • #19 最近給自己的加壓突然變高了,失望和沮喪也變多了惭婿,情緒開始搖擺不恭,產(chǎn)出也很波動。 1.參與日語字幕組的時候财饥,發(fā)...
    花花騷年閱讀 377評論 0 0
  • 文/陽光 圖/陽光.網(wǎng)絡(luò) 以誠獲愛钥星,以愛立信沾瓦,以信致遠(yuǎn) 小時候奶奶總對我講,今天是你的生日谦炒,也是你媽媽的苦難日贯莺,以...
    挪威陽光閱讀 358評論 7 9
  • 前言:彼岸花,傳說中寧界唯一的花也叫引魂花宁改。彼岸花是開在黃泉路之路的話缕探,多,在那兒还蹲,大批大批開著這花爹耗,遠(yuǎn)遠(yuǎn)看上去像...
    夏依茗雪閱讀 259評論 0 0