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  因为不是过去

 

 

 
posted @ 2021-10-09 20:35  雨过了天晴  阅读(1352)  评论(0编辑  收藏  举报