Carbon - 时间处理大全

745 阅读5分钟

**

// zh 中文
\Carbon\Carbon::setLocale('zh');
  • 设置时区

**

// Asia/shanghai 亚洲/上海  返回Carbon对象
$carbon = \Illuminate\Support\Carbon::now('Asia/shanghai');
// or 
$carbon = \Illuminate\Support\Carbon::now( new DateTimeZone('Asia/shanghai') );
  • today() , tomorrow() , yesterday() 返回值 Carbon对象

**

// today 今天
\Carbon\Carbon::today('Asia/shanghai');          // 2019-02-13 00:00:00
// tomorrow 明天
\Carbon\Carbon::tomorrow('Asia/shanghai');       // 2019-02-14 00:00:00
// yesterday 昨天
\Carbon\Carbon::yesterday('Asia/shanghai');       // 2019-02-12 00:00:00
  • 字符串类型输出

**

// toDateTimeString()     format: Y-m-d H:i:s
echo \Carbon\Carbon::now('Asia/shanghai')->toDateTimeString();  // 2019-02-13 11:19:52
// toDateString()         format: Y-m-d
echo \Carbon\Carbon::now('Asia/shanghai')->toDateString();      // 2019-02-13
// format(string)          自定义格式
echo \Carbon\Carbon::parse('2 days ago', 'UTC')->format('Y-m-d H:i');   // 2019-02-11 03:43
  • 解析已有时间

**

// Carbon 对象
\Carbon\Carbon::parse('2019-01-01 01:01:01', 'UTC');  // 2019-01-01 01:01:01
\Carbon\Carbon::parse('2019-01-01');       // 2019-01-01 00:00:00

\Carbon\Carbon::parse('today');            // 2019-02-13 00:00:00
\Carbon\Carbon::parse('tomorrow');         // 2019-02-14 00:00:00
\Carbon\Carbon::parse('yesterday');        // 2019-02-12 00:00:00

\Carbon\Carbon::parse('2 days ago') ;       // 2天前  2019-02-11 03:33:30
\Carbon\Carbon::parse('+3 days');           // 3天后  2019-02-16 03:33:30
\Carbon\Carbon::parse('+2 weeks');          // 2周后 2019-02-27 03:33:30
\Carbon\Carbon::parse('+4 months');         // 4个月后 2019-06-13 03:33:30
\Carbon\Carbon::parse('-1 year');           // 一年前 2018-02-13 03:33:30
\Carbon\Carbon::parse('next wednesday');    // 下星期三 2019-02-20 00:00:00
\Carbon\Carbon::parse('last friday');       // 上星期五 2019-02-08 00:00:00
  • 构造日期

**

// 当前时间 2019-02-13 11:47:41
\Carbon\Carbon::createFromDate(2018,12,12, 'Asia/shanghai');  // 2018-12-12 11:47:41
// 2018-12-12 12:12:12
\Carbon\Carbon::create(2018,12,12, 12, 12,12,'Asia/shanghai'); // 2018-12-12 12:12:12

// 当前时间 2019-02-13 11:52:03
// 2018-12-12 11:52:03
\Carbon\Carbon::createFromDate(2018,12,12, 'Asia/shanghai');
// 2019-12-12 11:52:03
\Carbon\Carbon::createFromDate(null,12,12, 'Asia/shanghai');
// 2019-10-13 11:52:03
\Carbon\Carbon::createFromDate(null,10,null, 'Asia/shanghai');
  • 日期操作 addXxx()

**

// 2019-02-13 13:21:14
\Carbon\Carbon::now('Asia/shanghai');

// 后一天
\Carbon\Carbon::now('Asia/shanghai')->addDay();   // 2019-02-14 13:21:14
// 后5天
\Carbon\Carbon::now('Asia/shanghai')->addDays(5); // 2019-02-18 13:21:14

// 一周后
\Carbon\Carbon::now('Asia/shanghai')->addWeek();  // 2019-02-20 13:21:14
// 三周后
\Carbon\Carbon::now('Asia/shanghai')->addWeeks(3); // 2019-03-06 13:21:14

// 一小时后
\Carbon\Carbon::now('Asia/shanghai')->addHour();  // 2019-02-13 14:21:14
// 3小时候
\Carbon\Carbon::now('Asia/shanghai')->addHours(3); // 2019-02-13 16:21:14

// 一分钟后
\Carbon\Carbon::now('Asia/shanghai')->addMinute();    // 2019-02-13 13:22:14
// 5分钟后
\Carbon\Carbon::now('Asia/shanghai')->addMinutes(5);  //  2019-02-13 13:26:14

// modify 修改当前时间
// 2天前
\Carbon\Carbon::now('Asia/shanghai')->modify('-2 days');  // 2019-02-11 13:21:14
// 2天后
\Carbon\Carbon::now('Asia/shanghai')->modify('+2 days');  // 2019-02-15 13:21:14
  • 日期操作 subXxx()

**

$one = \Carbon\Carbon::parse('2019-12-12 12:12:00');

$tow = \Carbon\Carbon::parse('2019-12-12 00:00:00');

// 减去一周 7 天
dump( $one->subWeek() );          // 2019-12-05 12:12:00
// 减去两周 14 天
dump( $one->subWeeks(2) );        // 2019-11-21 12:12:00
// 减去一个工作日  星期一到星期五 工作日
dump( $one->subWeekday() );       // 2019-11-20 12:12:00
// 减去3个工作日
dump( $one->subWeekdays(3) );     // 2019-11-15 12:12:00

// 减去一小时
dump( $one->subHour() );                // 2019-11-15 11:12:00
// 减去四小时
dump( $one->subHours(4) );        // 2019-11-15 07:12:00
// 减去一分钟
dump( $one->subMinute() );              // 2019-11-15 07:11:00
// 减去五分钟
dump( $one->subMinutes(5) );      // 2019-11-15 07:06:00
// 减去一秒
dump( $one->subSecond() );              // 2019-11-15 07:05:59
// 减去23秒
dump( $one->subSeconds(23) );     // 2019-11-15 07:05:36

// 减去一天
dump( $one->subDay() );                 // 2019-11-14 07:05:36
// 减去三天
dump( $one->subDays(2) );         // 2019-11-12 07:05:36
// 减去一个月
dump( $one->subMonth() );               // 2019-10-12 07:05:36
// 减去两个月
dump( $one->subMonths(2) );       // 2019-08-12 07:05:36
// 减去一年
dump( $one->subYear() );                // 2018-08-12 07:05:36
// 减去两年
dump( $one->subYears(2) );        // 2016-08-12 07:05:36

// 减去一个季度 3个月
dump( $one->subQuarter() );             // 2016-05-12 07:05:36
// 减去两个季度 6个月
dump( $one->subQuarters(2) );     // 2015-11-12 07:05:36
// 减去3个季度
dump( $one->subQuarters(3) );     // 2015-02-12 07:05:36

dump( $one->subRealHour() );            // 2015-02-12 06:05:36
dump( $one->subRealHours(2) );    // 2015-02-12 04:05:36

// 减去一个世纪 100 年
dump( $one->subCentury() );             // 1915-02-12 04:05:36
// 减去一个世纪
dump( $one->subCenturies(1) );    // 1815-02-12 04:05:36
  • 获取当前时区

**

echo \Carbon\Carbon::now('Asia/shanghai')->tzName;    // Asia/shanghai
  • Carbon 时区比较

**

$one = \Carbon\Carbon::parse('2019-12-12 12:12:00');

$tow = \Carbon\Carbon::parse('2019-12-12 00:00:00');

// eq 判断两个日期是否相等
$one->eq($tow);  // false
// ne 判断两个日期否相等
$one->ne($tow);  // true
// gt 判断第一个日期是否比第二个日期大
$one->gt($tow);  // true
// lt 判断第一个日期是否比第二个日期小
$one->lt($tow);  // false
// gte 判断第一个日期是否大于等于第二个日期
$one->gte($tow); // true
// lte 判断第一个日期是否小于等于第二个日期
$one->lte($tow); // false

// min 返回最小日期
$one->min($tow);  // 2019-12-12 00:00:00
// max 返回最大日期
$one->max($tow);  // 2019-12-12 12:12:00
  • betewwn 判断日期是否在两个日期之间

**

$one = \Carbon\Carbon::parse('2019-12-12 12:12:00');

$tow = \Carbon\Carbon::parse('2019-12-12 00:00:00');

// true
 \Carbon\Carbon::parse('2019-12-12 08:00:00')->between($one, $tow);

// false
\Carbon\Carbon::parse('2019-12-12 14:00:00')->between($one, $tow);

// true
\Carbon\Carbon::parse('2019-12-12 12:12:00')->between($one, $tow);

// 第三个参数判断边界是否相等  默认true 默认边界可以相等
\Carbon\Carbon::parse('2019-12-12 12:12:00')->between($one, $tow, false);  // false
  • 判断时间

**

$one = \Carbon\Carbon::parse('2019-12-12 12:12:00');

$tow = \Carbon\Carbon::parse('2019-12-12 00:00:00');

// isWeekday() 判断当前日期是否是工作日
$one->isWeekday();  // true
// isWeekend() 判断当前日期是否是周末
$one->isWeekend();  // false

// isYesterday() 判断时间是否是昨天
$tow->isYesterday(); // false
// isToday() 判断日期是否是今天
$tow->isToday(); // false
// isTomorrow() 判断日期是否是明天
$tow->isTomorrow(); // false
// isFuture() 判断日期是否是当前日期之后(gt()函数比较)
$tow->isFuture(); //true
// isPast() 判断日期是否是当前日期之前(lt()函数比较)
$tow->isPast();  // false
// isLeapYear() 判断年份是否为闰年 return $this->format('L') === '1';
$tow->isLeapYear(); // false

// isNextWeek() 判断时间是否在下周内

// isLastWeek() 判断时间是否在上周内

// isNextQuarter() 判断时间是否在下个季度内

// isLastQuarter() 判断时间是否在上个季度内

// isNextMonth() 判断时间是否在下一个月

// isLastMonth() 判断时间是否在上一个月

// isNextYear() 判断日期是否在下一年内

// isLastYear() 判断时间是否在昨年内

// isLongYear() 判断时间是否是长年 长年53周

// 判断 Y-m-d 日期对比
// isSameDay($date = null) 检查传入日期是否与实例日完全相同; return $this->isSameAs('Y-m-d', $date);

// isSunday() , isMonday() , isTuesday() , isWednesday() , isThursday() , isFriday() , isSaturday()

// isBirthday($date = null) 判断当前是否是否是生日 return $this->isSameAs('md', $date);

// isMidday() 判断时间是否是正午 return $this->format('G:i:s') === static::$midDayAt.':00:00'; static::$midDayAt = 12;

// isMidnight() 判断时间是否是白天 或 午夜的开始
  • 时间显示 diffForHumans()

**

// 根据本地语言显示
//     * @param bool        $absolute removes time difference modifiers ago, after, etc
//     * @param bool        $short   显示时间单位的短格式
//     * @param int         $parts    displays number of parts in the interval
// diffForHumans($other = null, $absolute = false, $short = false, $parts = 1)
$one = \Carbon\Carbon::parse('2019-12-12 12:12:00');

dump( $one->subDays(6)->diffForHumans() );  // 9 months from now

dump( \Carbon\Carbon::now()->diffForHumans(\Carbon\Carbon::now()->subYear()) ); // 1 year after