龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > PHP > Carbon-PHP中如期/时间处理,只需要这个包就可以

Carbon-PHP中如期/时间处理,只需要这个包就可以

龙行    PHP    2020-3-23    462    0评论    

Carbon-PHP中如期/时间处理,这需要这个包就可以,不错的东西

QQ截图20200323163629

PHP中使用日期和时间并不是容易或者比较清晰的任务,那就必须处理时间strtotime,格式化问题,大量复杂计算

包就是Carbon可以帮助你在PHP开发者涉及到处理日期/时间变得更加简单,代码更易阅读和维护

Carbon


Carbon是国外Brian Nesbit开发的一个包,它扩展了PHP自己的DateTime

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

  • 处理时区

  • 轻松获取当前时间

  • 将datetime转换成可读的内容

  • 将英语短语解析成datetime(first day of january 2020)

  • 日期的加减(+ 2 weeks,-6 months)

  • 处理日期的语义方法

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

设置


为了使用Carbon, 你需要从命名空间导入Carbon.在laravel中已经包括了Carbon,所以不需要composer一起添加.

当我们需要使用Carbon的时候可以这样导入:

<?php
use Carbon\Carbon;

下载使用

github地址

//composer安装
$ composer require nesbot/carbon

//或者composer update
{
   "require": {
       "nesbot/carbon": "^2.16"
   }
}

获取特定日期/时间


// 获取当前时间  - 2015-12-19 10:10:54
$current = Carbon::now();
$current = new Carbon();

// 获取今天 - 2015-12-19 00:00:00
$today = Carbon::today();

// 获取昨天 - 2015-12-18 00:00:00
$yesterday = Carbon::yesterday();

// 获取明天 - 2015-12-20 00:00:00
$tomorrow = Carbon::tomorrow();

// 解析特定字符串 - 2016-01-01 00:00:00
$newYear = new Carbon('first day of January 2016');

// 设定一个特定的时区 - 2016-01-01 00:00:00
$newYearPST = new Carbon('first day of January 2016', '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);                   // 2017-01-31 00:00:00
echo $dt->addYear();                     // 2018-01-31 00:00:00
echo $dt->subYear();                     // 2017-01-31 00:00:00
echo $dt->subYears(5);                   // 2012-01-31 00:00:00

echo $dt->addMonths(60);                 // 2017-01-31 00:00:00
echo $dt->addMonth();                    // 2017-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps
echo $dt->subMonth();                    // 2017-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:00

Getters and Setters

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

$dt = Carbon::now();

// 设置一些参数
$dt->year   = 2015;
$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();               // 2015-12-19
echo $dt->toFormattedDateString();      // Dec 19, 2015
echo $dt->toTimeString();               // 10:10:16
echo $dt->toDateTimeString();           // 2015-12-19 10:10:16
echo $dt->toDayDateTimeString();        // Sat, Dec 19, 2015 10:10 AM

// ……当然 format() 也可以这样用
echo $dt->format('l jS \\of F Y h:i:s A');         // Saturday 19th of December 2015 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 中更容易的使用日期 / 时间并加快开发效率!

本文纯属兴趣转载;

原文地址: https://learnku.com/php/t/26998

辛苦作者翻译;




评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/354.html
  • 上篇文章:thinkphp6.0的第三方扩展包,支持上传阿里云,七牛云
  • 下篇文章:Go-关键字总结
  • php php7
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
快捷导航
联系博主
在线壁纸
给我留言
四四五五
音乐欣赏
返回顶部