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中的字符串函数
Nov 24 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
Dec 11 PHP
PHP 获取目录下的图片并随机显示的代码
Dec 28 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
PHP缓存技术的多种方法小结
Aug 14 PHP
深入解析php之sphinx
May 15 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
php表单提交实例讲解
Nov 12 PHP
php实现跨域提交form表单的方法【2种方法】
Oct 17 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
laravel withCount 统计关联数量的方法
Oct 10 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
弹出模态框modal的实现方法及实例
Sep 19 #PHP
You might like
eAccelerator的安装与使用详解
2013/06/13 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
prettify 代码高亮着色器google出品
2010/12/28 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
深入讲解Java编程中类的生命周期
2016/02/05 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
python自动化发送邮件实例讲解
2021/01/04 Python
pip install命令安装扩展库整理
2021/03/02 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
逻辑链路控制协议
2016/10/01 面试题
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
工作求职自荐信
2014/06/13 职场文书
新党章的学习心得体会
2014/11/07 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS