Carbon
Carbon 是一个用于处理日期和时间的 PHP 类,继承自 PHP DateTime 类的 API 扩展。
它提供了丰富的方法来操作和格式化日期时间,使得日期时间的处理变得更加简单和方便。
安装
使用 Composer 安装 Carbon:
composer require nesbot/carbonLaravel 项目已默认安装这个扩展包,所以如果使用的是 Laravel 框架则不需要执行上面的命令重复安装。
使用
生成日期/时间
当前
now() 方法获取当前的日期和时间。
use Carbon\Carbon;
echo Carbon::now();如果你不指定参数,它会使用 PHP 配置中的时区。
也可以传递一个有效的时区作为参数
use Carbon\Carbon;
Carbon::now('Europe/Paris'); // 巴黎时间
# 或者传入 DateTimeZone 示例
Carbon::now(new DateTimeZone('Europe/Paris'));今天
使用 today() 方法可以基于当前时间获取今天的 '00:00:00' 时间。
use Carbon\Carbon;
Carbon::today();昨天
使用 yesterday() 方法可以基于当前时间获取昨天的 '00:00:00' 时间。
use Carbon\Carbon;
Carbon::yesterday();明天
使用 tomorrw() 方法可以基于当前时间获取明天的 '00:00:00' 时间。
use Carbon\Carbon;
Carbon::tomorrow('Europe/London');年开始日期
使用 startOfYear() 方法可以获取本年开始的天的时间。
use Carbon\Carbon;
Carbon::now()->startOfYear();年结束时间
使用 endOfYear() 方法可以获取本年开始的天的时间,结束时间为 23:59:59。
use Carbon\Carbon;
Carbon::now()->endOfYear();月开始的日期
使用 startOfMonth() 方法可以获取本月开始天的日期。
Carbon\Carbon;
Carbon::now()->startOfMonth();月结束的时间
使用 endOfMonth() 方法可以获取本月结束天的时间,结束时间使用 23:59:59。
Carbon\Carbon;
Carbon::now()->endOfMonth();周开始的日期
使用 startOfWeek() 方法可以获取本周开始天的时间。
use Carbon\Carbon;
Carbon::now()->startOfWeek();周结束的时间
使用 endOfWeek() 方法可以获取本周结束的天的时间,结束时间为 23:59:59。
use Carbon\Carbon;
Carbon::now()->endOfWeek();天开始的日期
使用 startOfDay() 方法可以获取今天开始的天的时间,效果等同于 Carbon::today() 方法。
use Carbon\Carbon;
Carbon::now()->startOfDay();天结束的时间
使用 endOfDay() 方法可以获取今天结束的时间,结束时间为 23:59:59。
use Carbon\Carbon;
Carbon::now()->endOfDay();时开始的时间
使用 startOfHour() 方法可以获取当前小时开始的时间。
use Carbon\Carbon;
Carbon::now()->startOfHour();时结束的时间
使用 endOfHour() 方法可以获取当前小时结束的时间,结束时间为 59:59:59。
use Carbon\Carbon;
Carbon::now()->endOfHour();分开始的时间
使用 startOfMinute() 方法可以获取当前分钟开始的时间。
use Carbon\Carbon;
Carbon::now()->startOfMinute();分结束的时间
使用 endOfMinute() 方法可以获取当前分钟结束的时间,结束时间为 59:59:59。
use Carbon\Carbon;
Carbon::now()->endOfMinute();日期解析 parse()
解析日期
use Carbon\Carbon;
Carbon::parse('2023-03-12');解析时间
use Carbon\Carbon;
Carbon::parse('2023-03-12 15:12:50');解析字符串
use Carbon\Carbon;
# 今天
Carbon::parse('today'); // 2024-03-12 00:00:00
# 昨天
Carbon::parse('yesterday'); // 2024-03-11 00:00:00
# 明天
Carbon::parse('tomorrow'); // 2024-03-12 00:00:00
# 两天前(包含时间)
Carbon::parse('2 days ago'); // 2024-03-10 15:12:50
# 三天后(包含时间)
Carbon::parse('+3 days'); // 2024-03-15 15:12:50
# 两周后(包含时间)
Carbon::parse('+2 weeks'); // 2024-03-26 15:12:50
# 四个月后(包含时间)
Carbon::parse('+4 months'); // 2024-07-12 15:12:50
# 一年前(包含时间)
Carbon::parse('-1 year'); // 2023-03-12 15:12:50
# 下周三
Carbon::parse('next wednesday'); // 2024-03-13 00:00:00
# 上周五
Carbon::parse('last friday'); // 2024-03-08 00:00:00构造日期
使用 create() 或者 createFromDate() 方法支持使用单独的年月日来构造日期。
use Carbon\Carbon;
Carbon::createFromDate(year: 2024, month: 03, day: 12); // 2024-03-12 15:12:50
Carbon::create(year: 2024, month: 03, day: 12, hour: 15, minute: 12, second: 12); // 2024-03-12 15:12:12如果对应的参数如果不提供则获取当前年、月、日、时、分、秒。
日期操作
日期操作可以通过增加 add*() 或减去 sub*() 跟上要增加或减去的单位来完成。
例如,需要给一个日期增加指定的天数,使用 addDays() 方法。此外还提供了一个 modify() 方法,参数格式为 + 或 - 跟上值及单位。
use Carbon\Carbon;
# 20 天后
Carbon::now()->addDays(20); // 2024-04-01 15:12:50
# 3 周后
Carbon::now()->addWeeks(3); // 2024-04-02 15:12:50
# 25 小时后
Carbon::now()->addHours(25); // 2024-03-13 16:12:50
# 2 小时前
Carbon::now()->subHours(2); // 2024-03-12 13:12:50
# 2 小时 10 分钟后
Carbon::now()->addHours(2)->addMinutes(10); // 2024-03-12 17:22:50
# 30 天后
Carbon::now()->modify('+30 days'); // 2024-04-11 15:12:50
# 2 天前
Carbon::now()->modify('-2 days'); // 2024-03-10 15:12:50日期比较
两个日期比较
Carbon 支持各种日期比较操作,例如判断日期是否相等、是否大于或小于另一个日期等。
min返回最小日期。max返回最大日期。eq判断两个日期是否相等。gt判断第一个日期是否比第二个日期大。lt判断第一个日期是否比第二个日期小。gte判断第一个日期是否大于等于第二个日期。lte判断第一个日期是否小于等于第二个日期。
use Carbon\Carbon;
# 获取当前时区
Carbon::now()->tzName; // PRC
$first = Carbon::create(2024, 03, 12, 15, 10, 50);
$second = Carbon::create(2024, 03, 12, 03, 10, 50, tz: 'America/New_York');
$first->eq($second); // true
$first->ne($second); // false
$first->gt($second); // false
$first->gte($second); // true
$first->lt($second); // false
$first->lte($second); // true判断日期是否介于两个日期之间
要判断一个日期是否介于两个日期之间,可以使用 between() 方法,第三个可选参数指定比较是否可以相等,默认为 true:
$first = Carbon::create(2024, 03, 12, 1);
$second = Carbon::create(2024, 03, 12, 5);
Carbon::create(2024, 03, 12, 3)->between($first, $second); // true
Carbon::create(2024, 03, 12, 5)->between($first, $second); // true
Carbon::create(2024, 03, 12, 5)->between($first, $second, false); // false日期判断
Carbon 支持多种日期判断操作,例如判断日期是否工作日、是否周末、是否昨天、是否今天、是否明天等。
use Carbon\Carbon;
# 是否工作日
Carbon::now()->isWeekday(); // true
# 是否周末
Carbon::now()->isWeekend(); // false
# 是否昨天
Carbon::now()->isYesterday(); // false
# 是否今天
Carbon::now()->isToday(); // true
# 是否明天
Carbon::now()->isTomorrow(); // false
# 是否未来
Carbon::now()->isFuture(); // false
# 是否是过去
Carbon::now()->isPast(); // true
# 是否是闰年(2024年是闰年)
Carbon::now()->isLeapYear(); // true
# 是否同一天
Carbon::now()->isSameDay(Carbon::now()); // true
$born = Carbon::createFromDate(1991, 08, 16);
$noCake = Carbon::createFromDate(2023, 09, 06);
$yesCake = Carbon::createFromDate(2024, 08, 16);
$born->isBirthday($noCake); // false
$born->isBirthday($yesCake); // true
# 默认不传递参数的话跟今天进行比较
Carbon::now()->subYears(50)->isBirthday(); // true