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

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

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

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

安装它

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

composer安装

这个最简单,使用下面代码便可完成。数据库

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规划了以下方法。

  • 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

相关文章
相关标签/搜索