1. composer安裝Carbon
composer require nesbot/carbon
2. 設置時區
<?php use Carbon\Carbon; use Carbon\CarbonPeriod; Carbon::setLocale('zh'); // 顯示中文 $dt = Carbon::now(); $dt->timezone = 'Asia/Shanghai'; // 北京時間:2021-10-09 13:02:09 echo Carbon::now('Asia/Shanghai'); // 北京時間:2021-10-09 13:02:09 echo Carbon::now('Europe/London'); // 倫敦時間:2021-10-09 06:02:09 echo Carbon::now('Europe/Paris'); // 巴黎時間:2021-10-09 07:02:09 echo Carbon::now('America/Vancouver'); // 溫哥華時間:2021-10-09 22:02:09
3. 使用示例
<?php use Carbon\Carbon; // 計算年齡(出生於1995-03-18) $howOldAmI = Carbon::createFromDate(1995, 03, 18)->age; echo $howOldAmI . '歲'; // 26歲
Carbon::createFromTimeStamp(1545800000); $time = Carbon::now(); // 獲取當前時間,2021-10-09 13:02:09 # 獲取時間字段 $time->timestamp; // 獲取時間戳 $time->toDateString(); // 2021-10-09 $time->format('Y'); // 2021 $time->format('m'); // 10 $time->format('d'); // 09 $time->dayOfWeek; // 獲取當前時間是一周的第幾天 $time->dayOfYear; // 獲取當前時間是一年的第幾天 $time->weekOfMonth; // 獲取當前時間是當月的第幾周 $time->weekOfYear; // 獲取當前時間是當年的第幾周 $time->daysInMonth; // 獲取當月有多少天 $time->startOfDay(); // 今天開始時間 $time->endOfDay(); // 今天結束時間 $time->startOfWeek(); // 這周開始時間 $time->endOfWeek(); // 這周結束時間 $time->startOfMonth(); // 這個月開始時間 $time->endOfMonth(); // 這個月結束時間 $time->format('m/y'); // 指定輸出格式: 10/2021
new Carbon('first day of this month'); // 本月第一天 new Carbon('first day of last month') // 上月第一天 echo Carbon::now(); // 當前時間 2021-10-09 16:29:15 echo Carbon::now()->toDateTimeString(); // 當前時間 2021-10-09 16:29:15 echo Carbon::today(); // 今天 2021-10-09 00:00:00 echo Carbon::parse('today')->toDateTimeString(); // 今天的日期 2021-10-09 00:00:00 echo Carbon::now()->toDateString(); // 今天 2021-10-09 echo Carbon::tomorrow(); // 明天 2021-10-10 00:00:00 echo Carbon::yesterday(); // 昨天 2021-10-08 00:00:00 echo Carbon::createFromDate(2021, 05, 21); // 創建指定日期 2021-05-21 16:29:15 echo Carbon::create(2021, 05, 21, 20, 00, 00); // 創建指定日期 2021-05-21 20:00:00 echo Carbon::now()->addHours(1); // 1小時后同一時間 2021-10-09 17:29:15 echo Carbon::now()->subHours(2); // 2小時前同一時間 2021-10-09 14:29:15 echo Carbon::now()->addHours(2)->addMinutes(1); // 2小時后+1分鍾 2021-10-09 18:30:15 echo Carbon::now()->addDays(1); // 1天后同一時間 2021-10-10 16:29:15 echo Carbon::now()->modify('+1 days'); // 1天后同一時間 2021-10-10 16:29:15 echo Carbon::now()->modify('-1 days'); // 1天前同一時間 2021-10-08 16:29:15 echo Carbon::now()->addWeeks(1); // 1周后同一時間 2021-10-16 16:29:15 echo Carbon::parse('2021-10-09 +10 days')->toDateTimeString() . PHP_EOL; // 10天后 2021-10-19 00:00:00
// 獲取兩個月份中間的所有月份 public function getMonths($start, $end) { $period = CarbonPeriod::create($start, '1 month', $end); $months = []; foreach ($period as $date) { $months[] = $date->format('Y-m'); } return $months; }
// 獲取日期區間 public function getDates($start, $end) { $period = CarbonPeriod::create($start, $end); // $dates = $period->toArray(); foreach ($period as $key => $date) { $list[$key]['year'] = $date->format('Y'); $list[$key]['month'] = $date->format('m'); $list[$key]['day'] = $date->format('d'); $list[$key]['week'] = $date->dayOfWeek; $list[$key]['date'] = $date->format('Y-m-d'); } return $list; }
日期比較:
$start = Carbon::create(2021, 05, 20, 5); // 2021-05-20 05:00:00 $end = Carbon::create(2021, 05, 20, 10); // 2021-05-20 10:00:00 var_dump($start ->eq($end)); // 相等 false var_dump($start ->ne($end)); // 不相等 true var_dump($start ->gt($end)); // 大於 false var_dump($start ->gte($end)); // 大於等於 false var_dump($start ->lt($end)); // 小於 true var_dump($start ->lte($end)); // 小於等於 true between():判斷一個日期是否在兩個日期之間(第三個可選參數指定比較是否可以相等,默認為 true) var_dump(Carbon::create(2021, 05, 20, 07)->between($start, $end)); // bool(true) var_dump(Carbon::create(2021, 05, 20, 10)->between($start, $end)); // bool(true) var_dump(Carbon::create(2021, 05, 20, 10)->between($start, $end, false)); // bool(false)
計算指定日期的差值:
diffInYears(年);diffInMonths(月);diffInDays(日);
diffInHours(時);diffInMinutes(分);diffInSeconds(秒);
$taday = Carbon::now(); // 2021-10-09 16:29:15 $yesterday = Carbon::parse('yesterday'); // 2021-10-08 00:00:00 echo $yesterday->diffInYears($taday, false); // 返回為正負數 1 echo $taday->diffInDays($yesterday, false); // -1 echo $taday->diffInDays($yesterday, true); // 1 $taday->diff($yesterday)->format('%H:%I:%S');
判斷是否是某一天(2021-10-11(周一)舉例)
$now = Carbon::now(); var_dump($now->isWeekend()); // false 因為周一不是周末 var_dump($now->isWeekday()); // true 因為周一是工作日 var_dump($now->isMonday()); // true 因為今天是周一 var_dump($now->isToday()); // true 因為是今天 var_dump($now->isTomorrow()); // false 因為不是明天 var_dump($now->isFuture()); // false 因為不是將來 var_dump($now->isPast()); // true 因為不是過去