日期及时间处理包 Carbon 的简单使用
在编写 PHP 应用时经常需要处理日期和时间,这篇文章带你了解一下 Carbon – 继承自 PHP DateTime 类的 API 扩展,它使得处理日期和时间更加简单。
1. 通过composer安装
版本环境要求:
1.x is compatible with PHP 5.3+.
2.x version requires PHP 7.1.8+.
composer require nesbot/carbon
{"require": {"nesbot/carbon": "^2.16"}
}
2.使用
<?php
require 'vendor/autoload.php';use Carbon\Carbon;printf("Now: %s", Carbon::now());
2.1获取当前时间
echo Carbon::now();
echo Carbon::today();
echo Carbon::tomorrow();
echo Carbon::yesterday();
//today()、tomorrow()、yesterday()等静态函数,它们的时间都是 00:00:00
输出结果
Carbon @1556674336 {#343 ▼date: 2019-05-01 09:32:16.169639 Asia/Hong_Kong (+08:00)
}
2.2 日期类型转为字符串
如上所述,默认情况下,Carbon 的方法返回的为一个日期时间对象。虽然它是一个对象,但是你却可以直接使用 echo 输出结果,因为有 __toString
魔术方法。但是如果你想把它转为字符串,可以使用 toDateString
或 toDateTimeString
方法:
echo Carbon::now()->toDateString(); //2019-05-01
echo Carbon::now()->toDateTimeString(); //2019-05-01 09:32:16
2.3日期解析
你还可以使用 parse方法解析任何顺序和类型的日期
Carbon::parse($time, $tz)
第一个参数指转换的时间,第二个参数为时区
$time可选的相对修饰符的单词列表是:
+
-
ago
first
next
last
this
today
tomorrow
yesterday
$knownDate = Carbon::create(2001, 5, 21, 12); // create testing date
Carbon::setTestNow($knownDate); // set the mock
echo new Carbon('tomorrow'); // 2001-05-22 00:00:00 ... notice the time !
echo new Carbon('yesterday'); // 2001-05-20 00:00:00
echo new Carbon('next wednesday'); // 2001-05-23 00:00:00
echo new Carbon('last friday'); // 2001-05-18 00:00:00
echo new Carbon('this thursday'); // 2001-05-24 00:00:00
Carbon::setTestNow(); // always clear it !
请注意,类似于next(),previous()和modify()方法,其中一些相对修饰符会将时间设置为00:00:00。
2.4 构造日期
$year = 2000; $month = 4; $day = 19;
$hour = 20; $minute = 30; $second = 15; $tz = 'Asia/Hong_Kong';
echo Carbon::createFromDate($year, $month, $day, $tz)."\n"; //2000-04-19 10:18:22
echo Carbon::createFromTime($hour, $minute, $second, $tz)."\n"; //2019-05-01 20:30:15
echo Carbon::create($year, $month, $day, $hour, $minute, $second, $tz)."\n"; //2000-04-19 20:30:15
createFromDate()将默认时间到现在。createFromTime()将日期默认为今天
2.5日期操作
默认的DateTime提供了几种不同的方法,可以轻松地添加和减去时间。 有modify(),add()和sub()
$dt = Carbon::create(2012, 1, 31, 0);echo $dt->toDateTimeString(); // 2012-01-31 00:00:00echo $dt->addCenturies(5); // 2512-01-31 00:00:00
echo $dt->addCentury(); // 2612-01-31 00:00:00
echo $dt->subCentury(); // 2512-01-31 00:00:00
echo $dt->subCenturies(5); // 2012-01-31 00:00:00echo $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:00echo $dt->addQuarters(2); // 2012-07-31 00:00:00
echo $dt->addQuarter(); // 2012-10-31 00:00:00
echo $dt->subQuarter(); // 2012-07-31 00:00:00
echo $dt->subQuarters(2); // 2012-01-31 00:00:00echo $dt->addMonths(60); // 2017-01-31 00:00:00
echo $dt->addMonth(); // 2017-03-03 00:00:00
echo $dt->subMonth(); // 2017-02-03 00:00:00
echo $dt->subMonths(60); // 2012-02-03 00:00:00echo $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:00echo $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:00echo $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:00echo $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:00echo $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:00echo $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:00echo $dt->addMilliseconds(61); // 2012-02-03 00:00:00
echo $dt->addMillisecond(); // 2012-02-03 00:00:00
echo $dt->subMillisecond(); // 2012-02-03 00:00:00
echo $dt->subMillisecond(61); // 2012-02-03 00:00:00echo $dt->addMicroseconds(61); // 2012-02-03 00:00:00
echo $dt->addMicrosecond(); // 2012-02-03 00:00:00
echo $dt->subMicrosecond(); // 2012-02-03 00:00:00
echo $dt->subMicroseconds(61); // 2012-02-03 00:00:00// and so on for any unit: millenium, century, decade, year,
//quarter, month, week, day, weekday, hour, minute, second, microsecond.//依此类推任何单位:千禧年,世纪,十年,年,
//季,月,周,日,工作日,小时,分钟,秒,微秒。
3.Carbon在Laravel中的使用
Laravel 中默认使用的时间处理类就是 Carbon。
Laravel 项目已默认安装了nesbot/carbon包。
2.6日期比较
通过以下功能提供简单的比较。请记住,比较是在UTC时区完成的,所以事情并不总是如此。
- min –返回最小日期。
- max – 返回最大日期。
- eq – 判断两个日期是否相等。
- gt – 判断第一个日期是否比第二个日期大。
- lt – 判断第一个日期是否比第二个日期小。
- gte – 判断第一个日期是否大于等于第二个日期。
- lte – 判断第一个日期是否小于等于第二个日期。
$first = Carbon::create(2012, 9, 5, 23, 26, 11,'UTC');
$second = Carbon::create(2012, 9, 5, 20, 26, 11, 'America/Vancouver');echo $first->toDateTimeString(); // 2012-09-05 23:26:11
echo $first->tzName; // UTC
echo $second->toDateTimeString(); // 2012-09-05 20:26:11
echo $second->tzName; // America/Vancouvervar_dump($first->eq($second)); // bool(true)
var_dump($first->gt($second)); // bool(false)
var_dump($first->gte($second)); // bool(true)
var_dump($first->lt($second)); // bool(false)
var_dump($first->lte($second)); // bool(true)
要确定当前实例是否在两个其他实例之间,您可以使用恰当命名的between()方法(或isBetween()别名)。 第三个参数表示是否应该进行等于比较。 默认值为true,用于确定其是否在边界之间或等于边界。
$first = Carbon::create(2012, 9, 5, 1);
$second = Carbon::create(2012, 9, 5, 5);
var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second)); // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second)); // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false)); // bool(false)
var_dump(Carbon::create(2012, 9, 5, 5)->isBetween($first, $second, false)); // bool(false)
2.7 Difference for Humans
参考文档:https://carbon.nesbot.com/docs/#api-humandiff
1 month ago与30天前相比,人类更容易阅读。这是在大多数日期库中看到的常见功能,所以我想我也会在这里添加它。该函数的唯一参数是要比对的另一个Carbon实例,当然now()如果未指定则默认为。
此方法将在相对于实例和传入实例的差值之后添加一个短语。有4种可能性:
将过去的值与默认值进行比较时:
- 1小时前
- 5个月前
将未来的值与默认值进行比较时:
- 从现在起1小时
- 从现在起5个月
将过去的值与另一个值进行比较时:
- 1小时前
- 5个月前
将未来的值与另一个值进行比较时:
- 1小时后
- 5个月后
// The most typical usage is for comments
// The instance is the date the comment was created and its being compared to default now()
echo Carbon::now()->subDays(5)->diffForHumans(); // 5 days agoecho Carbon::now()->diffForHumans(Carbon::now()->subYear()); // 11 months after$dt = Carbon::createFromDate(2011, 8, 1);echo $dt->diffForHumans($dt->copy()->addMonth()); // 1 month before
echo $dt->diffForHumans($dt->copy()->subMonth()); // 1 month afterecho Carbon::now()->addSeconds(5)->diffForHumans(); // in 4 secondsecho Carbon::now()->subDays(24)->diffForHumans(); // 3 weeks ago
echo Carbon::now()->subDays(24)->longAbsoluteDiffForHumans(); // 3 weeksecho Carbon::parse('2019-08-03')->diffForHumans('2019-08-13'); // 1 week before
echo Carbon::parse('2000-01-01 00:50:32')->diffForHumans('@946684800'); // 50 minutes afterecho Carbon::create(2018, 2, 26, 4, 29, 43)->longRelativeDiffForHumans(Carbon::create(2016, 6, 21, 0, 0, 0), 6);
// 1 year 8 months 5 days 4 hours 29 minutes 43 seconds after
3.1Laravel本地化
Laravel 中默认使用的时间处理类就是 Carbon
可以在 app/Providers/AppServiceProvider.php
的 boot()
方法中添加下面的代码来设置全局本地化:
public function boot()
{\Carbon\Carbon::setLocale('zh');
}
更多用法请参考文档:Carbon手册
日期及时间处理包 Carbon 的简单使用相关推荐
- php carbon 连续日期,日期及时间处理包 Carbon 在 Laravel 中的简单使用
在编写 PHP 应用时经常需要处理日期和时间,这篇文章带你了解一下 Carbon – 继承自 PHP DateTime 类的 API 扩展,它使得处理日期和时间更加简单.Laravel 中默认使用的时 ...
- Laravel 日期时间处理包 Carbon 的应用
在编写 PHP 应用时经常需要处理日期和时间,这篇文章带你了解一下 Carbon – 继承自 PHP DateTime 类的 API 扩展,它使得处理日期和时间更加简单.Laravel 中默认使用的时 ...
- 【小家java】java8新特性之---全新的日期、时间API(JSR 310规范),附SpringMVC、Mybatis中使用JSR310的正确姿势
[小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小家java ...
- Python实战之数字、日期和时间的高级处理
写在前面 博文为<Python Cookbook>读书后笔记整理 涉及内容包括: 浮点数执行指定精度的舍入运算. 执行精确的浮点数运算 数字的格式化输出 对数值进行取整 二进制.八进制和十 ...
- Java日期与时间API(详解全部新与旧API,含代码例子)
目录 前言必读 二.新与旧API 新的API: 旧的API: 初步使用大全(SimpleDateFormat) 三.代码例子 1.获取当前时间 2.字符串转化为时间 四.新的API 1.LocalDa ...
- Python:日期和时间包datetime的用法
1. 基本定义 1.1 时间戳 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数(或总毫秒数).网上有很多时间戳在 ...
- R语言使用lubridate包的tz函数设置和查询日期、时间对象的时区信息( time zone)
R语言使用lubridate包的tz函数设置和查询日期.时间对象的时区信息( time zone) 目录
- Python圆面积的计算、简单的人名对话、同切圆的绘制、日期和时间的输出。
圆面积的计算.根据圆的半径计算圆的面积. 代码如下: #1.1 CalCirArea.py radius = 25 area = 3.1415 * radius * radius print(area ...
- 13-19 Python Number、Python字符串、Python列表(List)、集合的基本操作、元组、字典Dicttionnary、日期和时间
13 Python Number Python Number数据类型用于存储数值. 数据类型是不允许改变的,这就是意味着如果改变Number数据类型的值,将重新分配内存空间. 以下实例在变量赋值时Nu ...
最新文章
- window 杀死已开任务启命令
- arima模型 p q d 确定_基于ARIMA预测股指期货价格走势
- pytorch 模型可视化_PyTorch Tips(FLOPs计算/参数量/计算图可视化/相关性分析)
- 加载如下html 写出输出顺序,浏览器加载和渲染html的顺序-结论篇
- 依赖注入及AOP简述(五)——依赖注入的方式 .
- maven 整体打包_Spirng boot maven多模块打包不踩坑(示例代码)
- Git 版本管理工具命令速查
- php 类的实现 完整例子
- tomcat给android发图片,一步一步学会http获取tomcat服务端的图片,在android客户端显示...
- jupyter notebook 中添加 Julia kernel
- [论文翻译] Active Learning by Feature Mixing
- python程序设计课后答案第二版_智慧职教APPPython程序设计(深圳信息职业技术学院)课后答案...
- Oracle:lsnrctl start Timeout or Adapter error
- 常量、变量;基本数据类型;input()、if、while、break、continue
- 如何设置Word自动检查语法错误
- android 9.0极光推送闪退,推送导致应用闪退
- 通过 iptables 禁止 ping
- FCC Lifeline项目现已帮助美国低收入家庭接入高速互联网
- caffe 人脸识别
- Oracle基本函数-大小写转换函数