CarbonPHP中日期 / 时间处理,拿到这个扩展包就够了

  在 PHP 中使用日期和时间并不是容易或清晰的任务。我们必须处理 strtotime ,格式化问题,大量计算等等。 这个漂亮的包叫做 Carbon 可以帮助在 PHP 开发中处理日期/时间变得更加简单、更语义化,从而使得我们的代码更容易阅读和维护。 Carbon Carbon 是由 Brian Nesbit 开发的一个包,它扩展了 PHP 自己的 DateTime 类。

  

CarbonPHP中日期 / 时间处理,拿到这个扩展包就够了

  它提供了一些很好的功能来处理 PHP 中的日期,特别是诸如:

  处理时区轻松获取当前时间将 datetime 转换成可读的内容将英语短语解析成 datetime (first day of January 2021)日期的加减 (+ 2 weeks, -6 months)处理日期的语义方法

  说到做到,750粉丝福利安排PHP进阶资料,免费获取

  所有的这些都带来了一个非常有用的包,使得这些在 PHP 中处理时间非常容易。

  设置

  为了使用 Carbon ,你需要从 Carbon 命名空间中导入 Carbon 。幸运的是,在 Laravel 中已经包括了 Carbon ,所以不需要和 Composer 一起添加。 当我们需要使用 Carbon 的时候,我们可以这样导入它:

  

  在导入之后,让我们看看我们可以用这个很棒的包做一些很酷的事情。

  获取特定的日期/时间

  // 获取当前时间 - 2021-12-19 10:10:54

  $current=Carbon::now();

  $current=new Carbon();

  // 获取今天 - 2021-12-19 00:00:00

  $today=Carbon::today();

  // 获取昨天 - 2021-12-18 00:00:00

  $yesterday=Carbon::yesterday();

  // 获取明天 - 2021-12-20 00:00:00

  $tomorrow=Carbon::tomorrow();

  // 解析特定字符串 - 2021-01-01 00:00:00

  $newYear=new Carbon('first day of January 2021');

  // 设定一个特定的时区 - 2021-01-01 00:00:00

  $newYearPST=new Carbon('first day of January 2021', 'America\Pacific');创造具有更细粒度控制的日期

  除了快速定义日期/时间方法之外,Carbon 也可以让我们从特定数量的参数中创建时间。

  Carbon::createFromDate($year, $month, $day, $tz);

  Carbon::createFromTime($hour, $minute, $second, $tz);

  Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);

  当你以一种通常不被 Carbon 识别的格式获得某种日期或时间时,这些是非常有用的。如果你为任何一个参数传递 null 值,则它默认会使用当前日期/时间传递 。

  操作日期/时间

  抓取日期/时间并不是你在处理日期时唯一要做的事情。你经常需要操作日期或时间。

  例如,当为一个用户创建一个试用期时,你将希望试用期在一定时间后过期。假设我们有 30 天的试用期。我们可以用 add 和 subtract 很容易的计算出时间。

  在这段试用期内,我们会:

  // 获取当前时间

  $current=Carbon::now();

  // 添加 30 天到当前时间

  $trialExpires=$current->addDays(30);

  从 Carbon 文档 中,我们可以找到一些其他地址的 add() 和 sub() 方法:

  $dt=Carbon::create(2012, 1, 31, 0);

  echo $dt->toDateTimeString(); // 2012-01-31 00:00:00

  echo $dt->addYears(5); // 2021-01-31 00:00:00

  echo $dt->addYear(); // 2021-01-31 00:00:00

  echo $dt->subYear(); // 2021-01-31 00:00:00

  echo $dt->subYears(5); // 2012-01-31 00:00:00

  echo $dt->addMonths(60); // 2021-01-31 00:00:00

  echo $dt->addMonth(); // 2021-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps

  echo $dt->subMonth(); // 2021-02-03 00:00:00

  echo $dt->subMonths(60); // 2012-02-03 00:00:00

  echo $dt->addDays(29); // 2012-03-03 00:00:00

  echo $dt->addDay(); // 2012-03-04 00:00:00

  echo $dt->subDay(); // 2012-03-03 00:00:00

  echo $dt->subDays(29); // 2012-02-03 00:00:00

  echo $dt->addWeekdays(4); // 2012-02-09 00:00:00

  echo $dt->addWeekday(); // 2012-02-10 00:00:00

  echo $dt->subWeekday(); // 2012-02-09 00:00:00

  echo $dt->subWeekdays(4); // 2012-02-03 00:00:00

  echo $dt->addWeeks(3); // 2012-02-24 00:00:00

  echo $dt->addWeek(); // 2012-03-02 00:00:00

  echo $dt->subWeek(); // 2012-02-24 00:00:00

  echo $dt->subWeeks(3); // 2012-02-03 00:00:00

  echo $dt->addHours(24); // 2012-02-04 00:00:00

  echo $dt->addHour(); // 2012-02-04 01:00:00

  echo $dt->subHour(); // 2012-02-04 00:00:00

  echo $dt->subHours(24); // 2012-02-03 00:00:00

  echo $dt->addMinutes(61); // 2012-02-03 01:01:00

  echo $dt->addMinute(); // 2012-02-03 01:02:00

  echo $dt->subMinute(); // 2012-02-03 01:01:00

  echo $dt->subMinutes(61); // 2012-02-03 00:00:00

  echo $dt->addSeconds(61); // 2012-02-03 00:01:01

  echo $dt->addSecond(); // 2012-02-03 00:01:02

  echo $dt->subSecond(); // 2012-02-03 00:01:01

  echo $dt->subSeconds(61); // 2012-02-03 00:00:00Getters and Setters

  另外一种快速操作或读取时间的方法是使用可用的 getters 和 serrers 。

  $dt=Carbon::now();

  // 设置一些参数

  $dt->year=2021;

  $dt->month=04;

  $dt->day=21;

  $dt->hour=22;

  $dt->minute=32;

  $dt->second=5;

  // 获取一些参数

  var_dump($dt->year);

  var_dump($dt->month);

  var_dump($dt->day);

  var_dump($dt->hour);

  var_dump($dt->second);

  var_dump($dt->dayOfWeek);

  var_dump($dt->dayOfYear);

  var_dump($dt->weekOfMonth);

  var_dump($dt->daysInMonth);

  我们甚至还可以把一些 setter 串在一起。

  $dt=Carbon::now();

  $dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString();

  $dt->setDate(1975, 5, 21)->setTime(22, 32, 5)->toDateTimeString();

  $dt->setDateTime(1975, 5, 21, 22, 32, 5)->toDateTimeString();格式化

  在上面的示例中,你可能注意到了 ->toDateTimeString() 方法。我们可以方便的为达到我们的目的去进行格式化。在这种情况下,我们得到了一个日期时间字符串。

  $dt=Carbon::now();

  echo $dt->toDateString(); // 2021-12-19

  echo $dt->toFormattedDateString(); // Dec 19, 2021

  echo $dt->toTimeString(); // 10:10:16

  echo $dt->toDateTimeString(); // 2021-12-19 10:10:16

  echo $dt->toDayDateTimeString(); // Sat, Dec 19, 2021 10:10 AM

  // ……当然 format() 也可以这样用

  echo $dt->format('l jS \\of F Y h:i:s A'); // Saturday 19th of December 2021 10:10:16 AM相对时间

  通过 diff() 方法可以很容易的显示相对时间。

  例如,我们有一篇博客,并且我们想显示它是在 三小时 前发布的。可以利用这些方法。

  求时间差

  这些方法用于求两个时间的时间差。

  $current=Carbon::now();

  $dt=Carbon::now();

  $dt=$dt->subHours(6);

  echo $dt->diffInHours($current); // -6

  echo $current->diffInHours($dt); // 6

  $future=$current->addMonth();

  $past=$current->subMonths(2);

  echo $current->diffInDays($future); // 31

  echo $current->diffInDays($past); // -62显示人类容易阅读的时间差

  在过去的几年,显示相对时间变得越来越流行。在 Twitter 和 Facebook 等社交网络中经常可以看到。

  例如,将时间显示为 3 小时前 比显示 上午 8:12,更适合人类阅读。

  这些方法被用于计算时间差,并转换为人类可阅读的格式。

  这里有四种表达时间差的方式:

  将一个过去的时间和现在做比较:1 小时前5 个月前

  将一个未来的时间和现在做比较:1 小时后5 个月后将一个过去的时间和另一个时间做比较:1 小时前5 小时前

  将一个未来的时间和另一个做比较:1 小时后5 小时后

  $dt=Carbon::now();

  $past=$dt->subMonth();

  $future=$dt->addMonth();

  echo $dt->subDays(10)->diffForHumans(); // 10 天前

  echo $dt->diffForHumans($past); // 1 个月前

  echo $dt->diffForHumans($future); // 1 个月前总结

  Carbon 能做的远远不止这些。请务必查看 Carbon 官方文档。希望这能帮助你在 PHP 中更容易的使用日期 / 时间并加快开发效率!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值