PHP中的日期/时间处理之Carbon组件

日常开发中,我们会经常用到日期和时间的操作,但官方的一般操作比较复杂,需要大量的时间进行格式化问题和大量计算等等。Carbon组件 可以帮助我们在 PHP 开发中处理日期/时间变得更加简单、更语义化,从而使得我们的代码更容易阅读和维护,下面我们将展示Carbon组件的部分使用示例。

1、安装Carbon组件

composer require nesbot/carbon

2、使用Carbon组件

use Carbon\Carbon;

3、使用Carbon组件操作日期/时间 之 获取日期和时间代码

//获取当前时间:2023-01-14 18:53:25
$current = Carbon::now();
echo "获取当前时间:" . $current;


//获取今天:2023-01-14 00:00:00
$today = Carbon::today();
echo "获取今天:" . $today;


//获取昨天:2023-01-13 00:00:00
$yesterday = Carbon::yesterday();
echo "获取昨天:" . $yesterday;


//获取明天:2023-01-15 00:00:00
$tomorrow = Carbon::tomorrow();
echo "获取明天:" . $tomorrow;


//解析特定字符串 - 2023-01-01 00:00:00
$newYear = new Carbon('first day of January 2023');
echo "解析特定字符串:" . $newYear;


//设定一个特定的时区 -2023-01-01 00:00:00
$newYearPST = new Carbon ('first day of January 2023', 'Asia/Shanghai');
echo "设定一个特定的时区:" . $newYearPST;

4、使用Carbon组件操作日期/时间 之 操作日期/时间

//添加 30 天到当前时间
$trialExpires = Carbon::now()->addDays(30);
echo "往后加30天:".$trialExpires;
//输出:往后加30天:2023-02-13 18:59:16


/*********伟大的分割线*********/
//创建一个日期 + 时间
$dt = Carbon::create(2023, 1, 12, 12);
echo $dt->toDateTimeString();
//2023-01-12 12:00:00


//加 5 年
echo $dt->addYears(5);
//2028-01-12 12:00:00


//在 5 年的基础上 再加 1 年
echo $dt->addYear();
//2029-01-12 12:00:00


// 减 1 年
echo $dt->subYear();
//2028-01-12 12:00:00


//减 5 年
echo $dt->subYears(5);
//2023-01-12 12:00:00


//加 60 个月
echo $dt->addMonths(60);
//2028-01-12 12:00:00


//加 1 个月
echo $dt->addMonth();
// 2028-02-12 12:00:00


//减 1 个月
echo $dt->subMonth();
//2028-01-12 12:00:00


//减 60 个月
echo $dt->subMonths(60);
// 2023-01-12 12:00:00


//加 29 天
echo $dt->addDays(29);
//2023-02-10 12:00:00


//加 1 天
echo $dt->addDay();
//2023-02-11 12:00:00


//减 1 天
echo $dt->subDay();
//2023-02-10 12:00:00


//减 29 天
echo $dt->subDays(29);
//2023-01-12 12:00:00


//加 4 天 排除周末
echo $dt->addWeekdays(2);
//2023-01-18 12:00:00


//加 1 天 排除周末
echo $dt->addWeekday();
//2023-01-19 12:00:00


//减 1 天 排除周末
echo $dt->subWeekday();
//2023-01-18 12:00:00


//减 4 天 排除周末
echo $dt->subWeekdays(4);
//2023-01-12 12:00:00

//加 3 周
echo $dt->addWeeks(3);
//2023-02-02 12:00:00


//加 1 周
echo $dt->addWeek();
//2023-02-07 12:00:00


//减 1 周
echo $dt->subWeek();
//2023-01-31 12:00:00


//减 3 周
echo $dt->subWeeks(3);
//2023-01-10 12:00:00


//加 24 小时
echo $dt->addHours(24);
//2023-01-11 12:00:00


//加 1 小时
echo $dt->addHour();
//2023-01-11 13:00:00


//减 1 小时
echo $dt->subHour();
//2023-01-11 12:00:00


//减 24 小时
echo $dt->subHours(24);
//2023-01-10 12:00:00


//加 50 分钟
echo $dt->addMinutes(50);
//2023-01-10 12:50:00


//加 1 分钟
echo $dt->addMinute();
//2023-01-10 12:51:00


//减 1 分钟
echo $dt->subMinute();
//2023-01-10 12:50:00


//减 50 分钟
echo $dt->subMinutes(50);
//2023-01-10 12:00:00


//加 50 秒
echo $dt->addSeconds(50);
//2023-01-10 12:00:50


//加 1 秒
echo $dt->addSecond();
//2023-01-10 12:00:51


//减 1 秒
echo $dt->subSecond();
//2023-01-10 12:00:50


//减 50 秒
echo $dt->subSeconds(50);
//2023-01-10 12:00:00


//加上 10 天
echo $dt->modify('+10 days');


//减 2 天
echo $dt->modify('-2 days');

5、使用Carbon组件操作日期/时间 之 格式化 日期 + 时间

$dt = Carbon::now();

//格式化 当前日期
echo $dt->toDateString();
//2023-01-14


//格式化 英文日期
echo $dt->toFormattedDateString();
//Jan 14, 2023


//格式化时间
echo $dt->toTimeString();
//19:08:21


//格式化日期 + 时间
echo $dt->toDateTimeString();
//2023-01-14 19:08:21


//格式化日期 + 时间  英文
echo $dt->toDayDateTimeString();
//Sat, Jan 14, 2023 7:08 PM

6、使用Carbon组件操作日期/时间 之 获取一个 格式化 字符串类型 的日期

echo Carbon::today()->toDateTimeString();     //获取当天的时间 带时分秒 2023-01-14 00:00:00
echo Carbon::yesterday()->toDateTimeString(); //2023-01-13 00:00:00
echo Carbon::tomorrow()->toDateTimeString(); //2023-01-15 00:00:00
echo Carbon::today()->toDateString();        //获取当天的时间 不带时分秒 2023-01-14
echo Carbon::yesterday()->toDateString();    //2023-01-13
echo Carbon::tomorrow()->toDateString();     //2023-01-15

7、使用Carbon组件操作日期/时间 之 解析日期/时间

echo Carbon::parse('2018-12-27')->toDateString();             //2018-12-27
echo Carbon::parse('2016-12-27')->toDateTimeString();         //2018-12-27 00:00:00
echo Carbon::parse('2016-12-27 00:10:25')->toDateTimeString(); //2018-12-27 00:10:25
echo Carbon::parse('2016-12-27 00:10:25')->timestamp;       //获取某个日期的时间戳
echo Carbon::parse('today')->toDateTimeString();            //获取当天的时间
echo Carbon::parse('yesterday')->toDateTimeString();        //获取昨天的时间
echo Carbon::parse('tomorrow')->toDateTimeString();         // 获取明天的时间
echo Carbon::parse('2 days ago')->toDateTimeString();       // 获取两天之前的时间
echo Carbon::parse('+3 days')->toDateTimeString();       // 获取两天之后的时间
echo Carbon::parse('+2 weeks')->toDateTimeString();      // 获取两周之后的时间
echo Carbon::parse('+4 months')->toDateTimeString();      // 获取两月之后的时间
echo Carbon::parse('-1 year')->toDateTimeString();      // 获取上一年的今天时间
echo Carbon::parse('next wednesday')->toDateTimeString(); // 获取下周三的时间
echo Carbon::parse('last friday')->toDateTimeString();    // 获取最后一个周五的时间
var_dump(Carbon::now()->isWeekday());  //是否是工作日
var_dump(Carbon::parse('2018-12-29')->isWeekday());
var_dump(Carbon::now()->isWeekend());  //是否是休息日
var_dump(Carbon::parse('2018-12-29')->isWeekend());
var_dump(Carbon::parse('2018-12-26')->isYesterday()); //是否是昨天
var_dump(Carbon::parse('2018-12-26')->isToday()); //是否是今天
var_dump(Carbon::parse('2018-12-26')->isTomorrow()); //是否是明天
var_dump(Carbon::createFromDate(1991,10,24)->isBirthday()); //今天是否是生日

8、使用Carbon组件操作日期/时间 之 构造日期/时间

echo Carbon::createFromDate('2018', '12', '27');  //2018-12-27 02:21:53   构造年月
echo Carbon::createFromDate('2018', '12', '27','Asia/Taipei');  //2018-12-27 10:22:12  //根据时区构造年月
echo Carbon::createFromTime('12', '59', '52');   // 给当前时间构造时分秒
echo Carbon::create('2018', '12', '27', '12', '59', '52', 'Asia/Taipei'); //构造完整的时分秒
echo Carbon::createFromFormat('Y/m/d H', '2018/05/21 22')->toDateTimeString(); // 构造指定格式的时间
echo Carbon::createFromTimeStamp(1545877701)->toDateTimeString();    //指定时间戳构建时间
echo Carbon::createFromTimeStamp(1545877701,'Asia/Taipei')->toDateTimeString();    //指定时间戳和时区构建时间
echo Carbon::createFromTimeStampUTC(1545877701)->toDateTimeString();    //指定时间戳和时区构建时间

9、使用Carbon组件操作日期/时间 之 获取日期信息(日期更详细的信息)

$time = Carbon::now();
var_dump($time->year);   //获取当前的年
var_dump($time->month);   //获取当前的月
var_dump($time->day);   //获取当前的日
var_dump($time->hour);   //获取当前的时
var_dump($time->minute);   //获取当前的分
var_dump($time->second);   //获取当前的秒
var_dump($time->micro);   //获取当前的毫秒
var_dump($time->dayOfWeek);   //获取当前时间是这周的第几天
var_dump($time->dayOfYear);   //获取当前时间是今年的第几天
var_dump($time->weekOfMonth);   //获取当前时间所以在周是当前月的第几周
var_dump($time->weekOfYear);   //获取当前时间所以在周是当前年的第几周
var_dump($time->daysInMonth);   //获取当月是多少天
var_dump(Carbon::createFromDate(1991, 10, 24)->age); //获取当前时间 距离 1991,10,24 多少年, 也就是你多少岁了

10、使用Carbon组件操作日期/时间 之 日期比较

echo Carbon::now()->tzName;   //获取当前时区
$first = Carbon::create(2018, 12, 5, 23, 26, 11);
$second = Carbon::create(2018, 9, 5, 20, 26, 11);
echo $first->toDateTimeString();
echo $second->toDateTimeString();

/**
 * min –返回最小日期。
 * max – 返回最大日期。
 * eq – 判断两个日期是否相等。
 * gt – 判断第一个日期是否比第二个日期大。
 * lt – 判断第一个日期是否比第二个日期小。
 * gte – 判断第一个日期是否大于等于第二个日期。
 * lte – 判断第一个日期是否小于等于第二个日期。
 */
var_dump($first->eq($second));
var_dump($first->ne($second));
var_dump($first->gt($second));
var_dump($first->gte($second));
var_dump($first->lt($second));
var_dump($first->lte($second));

//区间比较
$first = Carbon::create(2018, 10, 5, 1);
$second = Carbon::create(2018, 10, 5, 5);
var_dump(Carbon::create(2018, 10, 5, 3)->between($first, $second));          // bool(true)
var_dump(Carbon::create(2018, 10, 5, 5)->between($first, $second));          // bool(true)
var_dump(Carbon::create(2018, 10, 5, 5)->between($first, $second, false));   // bool(false)

11、使用Carbon组件操作日期/时间 之 获取特殊日期

echo Carbon::now()->startOfDay();  //今天开始时间
echo Carbon::now()->endOfDay();  //今天结束时间
echo Carbon::now()->startOfWeek(); //这周开始时间
echo Carbon::now()->endOfWeek(); //这周结束时间
echo Carbon::now()->startOfMonth(); //这月开始时间
echo Carbon::now()->endOfMonth(); //这月结束时间(带时分秒)
echo Carbon::now()->endOfMonth()->toDateString(); //这月结束时间(不带时分秒)


//获取指定日期所在月份的最后一天
echo Carbon::parse('2022-11')->endOfMonth()->toDateString(); //获取 2022年11月份的最后一天(不带时分秒 如果要带时分秒 则去掉toDateString方法即可)



另外还有很多很多各种使用方式,请移步到官方文档:https://carbon.nesbot.com



声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

小周博客
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复 0人评论 7,777人参与

loading