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 因为不是过去 |
分类:
PHP
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析