PHP 日期时间类 Carbon 的用法
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 因为不是过去