Laravel中七个非常有用但很少人知道的Carbon方法


Posted in PHP onSeptember 21, 2017

前言

大家应该都知道,我们在很多时候使用 Carbon 来处理日期和时间,对吗?但是又有多少人完整的阅读过文档了解它有那些方法呢?除了众所周知的 now() 和 format() 方法,Carbon 还有很多其他有用的方法。

下面我们一起来看看吧。

1. isX: True/False

有很多方法来判断 Carbon 对象是否是今天、周末、闰年等等,下面这些是官方文档列出来的:

<?php
$dt->isWeekday();
$dt->isWeekend();
$dt->isYesterday();
$dt->isToday();
$dt->isTomorrow();
$dt->isFuture();
$dt->isPast();
$dt->isLeapYear();
$dt->isSameDay(Carbon::now());

2. isBirthday

除了上面的列表,Carbon 还有一个方法来判断日期是否是某个人的生日。除了单开校验月和日外,你还可以这么做:

$born = Carbon::createFromDate(1987, 4, 23);
$noCake = Carbon::createFromDate(2014, 9, 26);
$yesCake = Carbon::createFromDate(2014, 4, 23);
var_dump($born->isBirthday($noCake));  // bool(false)
var_dump($born->isBirthday($yesCake));

3. StartOfX 和 EndOfX 列表

下面是 startOfX 系列和 endOfX 系列:

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfDay(); // 2012-01-31 00:00:00
echo $dt->endOfDay(); // 2012-01-31 23:59:59
echo $dt->startOfMonth(); // 2012-01-01 00:00:00
echo $dt->endOfMonth(); // 2012-01-31 23:59:59
echo $dt->startOfYear(); // 2012-01-01 00:00:00
echo $dt->endOfYear(); // 2012-12-31 23:59:59
echo $dt->startOfDecade(); // 2010-01-01 00:00:00
echo $dt->endOfDecade(); // 2019-12-31 23:59:59
echo $dt->startOfCentury(); // 2000-01-01 00:00:00
echo $dt->endOfCentury(); // 2099-12-31 23:59:59
echo $dt->startOfWeek(); // 2012-01-30 00:00:00
echo $dt->endOfWeek(); // 2012-02-05 23:59:59

4. Today, Tomorrow, Yesterday

三个简单却非常有用的方法,不需要调用 now(),然后替换掉时分秒,然后增加或者减去天数:

$today = Carbon::today(); // assuming 2016-06-24
echo $today;        // 2016-06-24 00:00:00
$tomorrow = Carbon::tomorrow();
echo $tomorrow;       // 2016-06-25 00:00:00
$yesterday = Carbon::yesterday();
echo $yesterday;       // 2016-06-23 00:00:00

5. DiffForHumans + 本地化

你可能用过这个叫做 diffForHumans() 的方法 ? 它会以一个便于人们阅读的方法返回两个日期之间的不同:

echo Carbon::now()->subDays(5)->diffForHumans(); // 5 days ago

但是你知道它也可以本地化吗?只需要改变地点即可,如汉语:

Carbon::setLocale('zh');
echo Carbon::now()->addYear()->diffForHumans(); // 一年前

6. 改变 now() 为任意你想要的时间

$knownDate = Carbon::create(2001, 5, 21, 12); // 创建测试日期
Carbon::setTestNow($knownDate);      // set the mock 
echo Carbon::now();         // 2001-05-21 12:00:00

7. 星期常量

可以通过下面的常量来代替一周中的第几天:

var_dump(Carbon::SUNDAY);       // int(0)
var_dump(Carbon::MONDAY);       // int(1)
var_dump(Carbon::TUESDAY);       // int(2)
var_dump(Carbon::WEDNESDAY);      // int(3)
var_dump(Carbon::THURSDAY);      // int(4)
var_dump(Carbon::FRIDAY);       // int(5)
var_dump(Carbon::SATURDAY);      // int(6)

上面提到的这些有用的方法你都了解吗?可以在留言种列出你觉得有用的方法。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php设计模式 Bridge (桥接模式)
Jun 26 PHP
php多个文件及图片上传实例详解
Nov 10 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
php生成动态验证码gif图片
Oct 19 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
php代码检查代理ip的有效性
Aug 19 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 #PHP
基于Laravel实现的用户动态模块开发
Sep 21 #PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 #PHP
PHP判断json格式是否正确的实现代码
Sep 20 #PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 #PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 #PHP
PHP使用Nginx实现反向代理
Sep 20 #PHP
You might like
smarty section简介与用法分析
2008/10/03 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
深入理解javascript中的this
2021/02/08 Javascript
Python itertools模块详解
2015/05/09 Python
Python文件的读写和异常代码示例
2017/10/31 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
python 以16进制打印输出的方法
2018/07/09 Python
python画折线图的程序
2018/07/26 Python
python pandas模块基础学习详解
2019/07/03 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
管理站站长岗位职责
2013/11/27 职场文书
人事专员的职责
2014/02/26 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
社会工作专业求职信
2014/07/15 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
实习介绍信模板
2015/01/30 职场文书
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers