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  因為不是過去

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM