PHP 日期时间类 Carbon 的用法

1. composer安装Carbon

composer require nesbot/carbon

2. 设置时区

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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. 使用示例

1
2
3
4
5
6
<?php
use Carbon\Carbon;
 
// 计算年龄(出生于1995-03-18)
$howOldAmI = Carbon::createFromDate(1995, 03, 18)->age;
echo $howOldAmI . '岁';   // 26岁
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
1
2
3
4
5
6
7
8
9
10
11
// 获取两个月份中间的所有月份
public function getMonths($start, $end)
{
    $period = CarbonPeriod::create($start, '1 month', $end);
    $months = [];
    foreach ($period as $date) {
        $months[] = $date->format('Y-m');
    }
 
    return $months;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 获取日期区间
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;
}

  

日期比较:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$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(秒);

1
2
3
4
5
6
$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(周一)举例)

1
2
3
4
5
6
7
8
$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 @   雨过了天晴  阅读(1434)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示