当前位置: 首页 > 工具软件 > Carbon > 使用案例 >

Carbon类详解

乐正穆冉
2023-12-01

Carbon 是 php 的日期处理类库

Carbon 继承了 Datetime 类,也就是说 Carbon 是一个关于 DateTime 的 PHP拓展,DateTime 里已经实现的方法,Carbon 都能使用。Carbon 具有从基本 DateTime 类继承的所有功能。这种方法使您可以访问基本功能,例如 ModifyFormatdiff

class Carbon extends DateTime implements JsonSerializable

安装:

composer require nesbot/carbon

如果是使用 Laravel 框架,从 Laravel 5.8 版开始,Laravel 正式支持 Carbon 2,也就是开箱即用 Carbon,无需使用 composer 安装 Carbon 依赖。


使用:

引入 Carbon

use Carbon\Carbon;

  • 可以使用 now() 获取当前时间,如果你想指定其他时区,也可以给 now() 方法传入一个参数指定。
echo Carbon::now();    // 2021-02-19 15:38:59⏎

echo Carbon::now('America/Los_Angeles');    // 2021-02-18 23:38:41

  • 除了 now() 方法外,Carbon 还提供了 today()tomorrow()yesterday() 等静态方法,但是它们的时间都是 00:00:00
echo Carbon::today();     // 2021-02-19 00:00:00

echo Carbon::tomorrow();     // 2021-02-20 00:00:00

echo Carbon::yesterday();    // 2021-02-18 00:00:00
  • 日期类型转换为字符串
    默认情况下,Carbon 的方法返回的是一个日期时间对象。如果需要的是字符串,可以使用如下方法转换:
echo Carbon::now()->toDateString();         // 2021-02-19

echo Carbon::now()->toDateTimeString();     // 2021-02-19 09:41:42

echo Carbon::now()->toTimeString();         // 09:43:42
  • 时间加减
    默认的DateTime提供了几种不同的方法来轻松地增加和减少时间。还有 modify()add()sub()
$dt = Carbon::create(2012, 1, 31, 0);

echo $dt->toDateTimeString();            // 2012-01-31 00:00:00

// 加减百年
echo $dt->addCenturies(5);               // 2512-01-31 00:00:00
echo $dt->addCentury();                  // 2612-01-31 00:00:00
echo $dt->subCentury();                  // 2512-01-31 00:00:00
echo $dt->subCenturies(5);               // 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->addQuarters(2);                // 2012-07-31 00:00:00
echo $dt->addQuarter();                  // 2012-10-31 00:00:00
echo $dt->subQuarter();                  // 2012-07-31 00:00:00
echo $dt->subQuarters(2);                // 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 $dt->addMilliseconds(61);           // 2012-02-03 00:00:00
echo $dt->addMillisecond();              // 2012-02-03 00:00:00
echo $dt->subMillisecond();              // 2012-02-03 00:00:00
echo $dt->subMillisecond(61);            // 2012-02-03 00:00:00

// 加减微秒
echo $dt->addMicroseconds(61);           // 2012-02-03 00:00:00
echo $dt->addMicrosecond();              // 2012-02-03 00:00:00
echo $dt->subMicrosecond();              // 2012-02-03 00:00:00
echo $dt->subMicroseconds(61);           // 2012-02-03 00:00:00

echo $dt->add(61, 'seconds');                      // 2012-02-03 00:01:01
echo $dt->sub('1 day');                            // 2012-02-02 00:01:01
echo $dt->add(CarbonInterval::months(2));          // 2012-04-02 00:01:01
echo $dt->subtract(new DateInterval('PT1H'));      // 2012-04-01 23:01:01
  • 两个时间比较
/**
  * min –返回最小日期。
  * max – 返回最大日期。
  * eq – 判断两个日期是否相等。
  * gt – 判断第一个日期是否比第二个日期大。
  * lt – 判断第一个日期是否比第二个日期小。
  * gte – 判断第一个日期是否大于等于第二个日期。
  * lte – 判断第一个日期是否小于等于第二个日期。
*/
$first = Carbon::create(2019, 1, 20, 12, 30, 30);
echo $first->toDateTimeString();                   // 2019-01-20 12:30:30

$second = Carbon::create(2019, 1, 22, 9, 30, 30);
echo $second->toDateTimeString();                  // 2019-01-22 09:30:30

// 是否相等
var_dump($first->equalTo($second));                // bool(false)
var_dump($first->eq($second));                     // bool(false)
var_dump($first == $second);                       // bool(false)

// 是否不相等
var_dump($first->notEqualTo($second));             // bool(true)
var_dump($first->ne($second));                     // bool(true)
var_dump($first != $second);                       // bool(true)

// $first 是否大于 $second
var_dump($first->gt($second));                     // bool(false)
var_dump($first->greaterThan($second));            // bool(false)
var_dump($first->isAfter($second));                // bool(false)
var_dump($first > $second);                        // bool(false)

// $first 是否大于或等于 $second
var_dump($first->gte($second));                    // bool(false)
var_dump($first->greaterThanOrEqualTo($second));   // bool(false)
var_dump($first >= $second);                       // bool(false)

// $first 是否小于 $second
var_dump($first->lt($second));                     // bool(true)
var_dump($first->lessThan($second));               // bool(true)
var_dump($first->isBefore($second));               // bool(true)
var_dump($first < $second);                        // bool(true)

// $first 是否小于或等于 $second
var_dump($first->lte($second));                    // bool(true)
var_dump($first->lessThanOrEqualTo($second));      // bool(true)
var_dump($first <= $second);                       // bool(true)

  • 格式化处理
Carbon::now()->format('Y/m/d H:i:s');			// 2021/02/19 17:23:27
Carbon::now ()->format ('Y 年 m 月 d 日');		  // 2021 年 02 月 19 日

如需更加详细的使用方法,可以参考官方文档

在线操作请看:http://try-carbon-package.herokuapp.com/

 类似资料: