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 相关文章推荐
实用函数5
Nov 08 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 PHP
php通用防注入程序 推荐
Feb 26 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
PHP之autoload运行机制实例分析
Aug 28 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
PHP设计模式之工厂模式详解
Oct 24 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 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
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
实例解析Python中的__new__特殊方法
2016/06/02 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
Django如何使用redis作为缓存
2020/05/21 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
婚庆公司计划书
2014/09/15 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书