阅读 395

Carbon - 赋予yii2强大的时间操作能力

能将一个时间库做到在github上8000+星星、各大PHP框架内置采用,无不体现Carbon过人之处。

阿北将尽量使用最通俗的语言带你入门,本教程使用carbon版本为1.25.0,运行环境如下:

  • PHP7.1.8(carbon最低版本要求为5.3)
  • Yii2.0.14(作为carbon演示程序,非必须)
  • Nginx

安装它

Carbon支持人工安装和composer安装。

composer安装

这个最简单,使用下面代码即可完成。

composer require nesbot/carbon
复制代码

这个扩展会有两个扩展包被下载下来,vendor目录中可以找到它们。

人工安装

我并不推荐这样做,如果非要不可,请如下步骤

1、下载Carbon.php文件 到你程序的任何位置。

https://github.com/briannesbitt/Carbon/blob/master/src/Carbon/Carbon.php

2、开始使用 引入我们刚刚下载的Carbon.php文件。

require 'path/to/Carbon.php';

use Carbon\Carbon;
echo Carbon::now();
复制代码

开始使用

Carbon在我们操作时间时更加语义化,它提供了一些对象方法和一些静态方法,为了讲解方便,我们采用问答式。

获得当前时间

在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;
复制代码

轻松拿到时间戳。

此刻是未来还是过去?

在这个世界上有很多日子是值得记住的,比如生日、比如周六、比如未来等等,考虑到这样的需求,Carbon规划了如下方法。

  • isWeekday
  • isWeekend
  • isYesterday
  • isToday
  • isTomorrow
  • isNextWeek
  • isLastWeek
  • isNextMonth
  • isLastMonth
  • isNextYear
  • isLastYear
  • isFuture
  • isPast
  • isLeapYear
  • isLongYear
  • isSameAs
  • isCurrentYear
  • isSameYear
  • isCurrentMonth
  • isSameMonth
  • isSameDay
  • isDayOfWeek
  • isSunday
  • isMonday
  • isTuesday
  • isWednesday
  • isThursday
  • isFriday
  • isSaturday

大多数可以看懂,有些特殊的说明下

  • isFuture 将来
  • isPast 过去
  • isLeapYear 闰年

海纳百川

我们刚刚是通过一些时刻生成了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);
复制代码

是不是很聪明。

3秒前

还有种经常用的时间格式就是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
复制代码

这里要注意first和second也是Carbon对象。

小结

以上就是Carbon一些常用方法,当然还有很多不常用的,具体大家可以去源文件Carbon.php中看看,这个库的目录结构很简单,就是方法繁多。

另外这段时间我会抽空整理出Carbon的速查表,发布后你可以一键速查。

相关链接

  • 官方地址 http://carbon.nesbot.com

阿北的知识分享 https://nai8.me

关注下面的标签,发现更多相似文章
评论