能将一个时间库作到在github上8000+星星、各大PHP框架内置采用,无不体现Carbon过人之处。php
阿北将尽可能使用最通俗的语言带你入门,本教程使用carbon版本为1.25.0,运行环境以下:git
Carbon支持人工安装和composer安装。github
这个最简单,使用下面代码便可完成。数据库
composer require nesbot/carbon
复制代码
这个扩展会有两个扩展包被下载下来,vendor目录中能够找到它们。yii2
我并不推荐这样作,若是非要不可,请以下步骤app
一、下载Carbon.php文件 到你程序的任何位置。composer
https://github.com/briannesbitt/Carbon/blob/master/src/Carbon/Carbon.php框架
二、开始使用 引入咱们刚刚下载的Carbon.php文件。yii
require 'path/to/Carbon.php';
use Carbon\Carbon;
echo Carbon::now();
复制代码
Carbon在咱们操做时间时更加语义化,它提供了一些对象方法和一些静态方法,为了讲解方便,咱们采用问答式。ui
在php里咱们能够经过date方法构造,并输入咱们想要的格式,而在Carbon则以下
Carbon::now();//2018-03-27 21:52:45
Carbon::now('Europe/London');//你也能够指定时区
复制代码
固然你也能够轻松获取时区
Carbon::now()->tzName;// Asia/Shanghai
复制代码
既然有now(),天然Carbon还很贴心的支持如下静态方法
Carbon::today();// 2018-03-27 00:00:00
Carbon::tomorrow();//2018-03-28 00:00:00
Carbon:: yesterday();//2018-03-26 00:00:00
复制代码
和now()同样,你能够为其传入时区参数。
咱们还能够为上面的now()这样的方法添加细节,好比我想得到昨天早上8点的时间值。
Carbon::yesterday()->addHours(8);//2018-03-26 08:00:00
Carbon::yesterday()->addHours(8)->addMinutes(29);//2018-03-26 08:29:00
Carbon::yesterday()->addHours(8)->addMinutes(29)->addSeconds(19);//2018-03-26 08:29:19
复制代码
做为一名phper,咱们总喜欢将时间转化为时间戳后存入数据库,用Carbon很简单
Carbon::yesterday()->addHours(8)->timestamp;
复制代码
轻松拿到时间戳。
在这个世界上有不少日子是值得记住的,好比生日、好比周6、好比将来等等,考虑到这样的需求,Carbon规划了以下方法。
大多数能够看懂,有些特殊的说明下
咱们刚刚是经过一些时刻生成了Carbon对象,好比now、today等,除了这些Carbon还能够包容其余来源,好比下面的
Carbon::createFromDate($year, $month, $day, $tz);
Carbon::createFromTime($hour, $minute, $second, $tz);
Carbon::createFromTimeString("$hour:$minute:$second", $tz);
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
复制代码
$tz表明时区。
还有一个咱们老喜欢的 从时间戳得到时间。
Carbon::createFromTimestamp(time())->addHours(-1);//得到一个小时前的时间点
复制代码
注意,针对于addHours等方法,你能够填写复数表明以前,是否是和咱们脑子里想的同样同样的。
上面都是经过其余形式得到时间,还有一种就是经过解析传递的时间来获取Carbon对象而后进一步操做,好比
Carbon::parse("2018-03-27")->addHours(-1);// 2018-03-26 23:00:00
复制代码
还支持一些语言内容first day of January 2008
Carbon::parse("first day of January 2008")->addHours(-1);
复制代码
是否是很聪明。
还有种常常用的时间格式就是5小时前、4秒前这种,固然在yii2中有 Yii::$app->formatter->asRelativeTime() 能够达到这个目的,使用Carbon那?
Carbon::now()->diffForHumans();// 1 second ago
复制代码
呀,怎么仍是英文那?别怕,咱们支持当地语言包,以下。
Carbon::setLocale('zh');
Carbon::now()->diffForHumans();// 1秒前
复制代码
迄今为止,Carbon一共支持64种语言。
针对于diffForHumans还支持一些参数配置,咱们会在Carbon速查表中给出。
针对于一个时间,Carbon容许咱们不一样的格式化、不一样的输出,好比下面的代码
$dt = Carbon::create(1975, 12, 25, 14, 15, 16);
echo $dt->toDateString(); // 1975-12-25
echo $dt->toFormattedDateString(); // Dec 25, 1975
echo $dt->toTimeString(); // 14:15:16
echo $dt->toDateTimeString(); // 1975-12-25 14:15:16
echo $dt->toDayDateTimeString(); // Thu, Dec 25, 1975 2:15 PM
复制代码
而且Carbon还提供了一个通用方法
$dt->format("Y-m-d H:i:s")
复制代码
有时候咱们须要判断用户输入的值是不是咱们要的时间格式,能够用Carbon提供的hasFormat方法。
$dt->hasFormat('2018-03-03', 'Y-m-d');//false
复制代码
返回真假。
有时候咱们须要判断用户输入的时间是否在指定的时间范围内,用Carbon轻松完成。
Carbon::parse($date)->between($first, $second);// true / false
复制代码
这里要注意second也是Carbon对象。
以上就是Carbon一些经常使用方法,固然还有不少不经常使用的,具体你们能够去源文件Carbon.php中看看,这个库的目录结构很简单,就是方法繁多。
另外这段时间我会抽空整理出Carbon的速查表,发布后你能够一键速查。
阿北的知识分享 https://nai8.me