kalani / date-range
Laravel 5 包,方便处理格式化日期范围
Requires
- illuminate/contracts: 5.*
- nesbot/carbon: 1.*
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: 4.*
Suggests
- illuminate/support: Required to use facade
This package is auto-updated.
Last update: 2024-09-17 09:26:27 UTC
README
DateRange 类提供了一个方便处理格式化日期范围的方法。它允许你执行如下操作
$range = DateRange::make('2/1/2014'); $range->start_sql; // returns 2014-02-01 $range->title // returns "For Saturday, February 1, 2014"
使用 DateRange 类,你可以从多种不同的格式初始化日期,并通过配置文件指定输出格式。
默认包含多种日期格式
Style Name PHP Format Example
----------- --------------- --------------------------
default n/j/Y 7/25/2014
short n/j/Y 7/25/2014
tiny n/j/y 7/25/14
pad m/d/y 07/25/14
padded m/d/Y 07/25/2014
sql Y-m-d 2014-07-25
full Y-m-d H:i:s 2014-07-25 08:53:27
title l, F j, Y For Friday, July 25, 2014
long D, M j, Y h:ia Fri, Jul 25, 2014 08:53am
month F Y July 2014
time g:ia 8:53am
url Y-m-d date=2014-07-25
默认也包含多种范围格式
Style Name Example
----------- -----------------------------------------------------
title From Friday, July 25, 2014 to Saturday, July 26, 2014
url start=2014-07-25&end=2014-07-26
short 7/25/2014 – 7/26/2014
short_title From 7/25/2014 to 7/26/2014
安装
使用 Composer 安装此包。编辑你的 composer.json 文件以要求 kalani/date-range。
"require": {
"kalani/date-range": "dev-master"
}
然后,在终端更新 Composer
composer update
然后,将服务提供者添加到 app\config\app.php 文件中的 providers 数组中
'Kalani\DateRange\DateRangeServiceProvider',
你还可以为 Facade 添加别名
'DateRange' => 'Kalani\DateRange\Facades\DateRange',
如果你想要定义自己的日期格式,请发布配置文件
php artisan config:publish kalani/date-range
使用方法
设置开始和结束日期
输入开始和(可选的)结束日期。DateRange 使用 Carbon 内部设置日期,因此你可以使用 Carbon 使用的任何方法来创建 DateRange 对象。例如,以下所有字符串都是有效的
DateRange::make(); // defaults to today
DateRange::make('today');
DateRange::make('today', 'tomorrow');
DateRange::make('today', 'next Friday');
DateRange::make('today', 'last day of this month');
DateRange::make('today', 'first day of next month');
...etc.
你也可以从一个 DateTime 对象构建一个 DateRange 对象
DateRange::make(new DateTime("2014-01-09 11:14:15.638276"));
或者从时间戳
DateRange::make(1388679600);
你也可以指定没有日期,通过输入 DateRange::none()
DateRange::make(DateRange::none());
DateRange::make('today', DateRange::none());
这可以用来表示某事有开始但没有固定的结束,或者相反。
如果你没有指定结束日期,结束日期将自动设置为开始日期。
输出日期和日期范围
你可以以各种样式输出开始日期、结束日期或完整范围。具体样式在配置文件中定义。使用 value_style
语法输出数据,其中 value
是开始、结束或范围,style
是你想要使用的输出样式。所以,
start_short output the start date in the short format (n/j/Y)
end_short output the end date in the short format
range_short output the range in a short format
short output the range in a short format
上述已描述预定义格式。
每个格式也可以有范围分隔符。这将分别在两个日期之前、中间和之后插入文本。如果开始和结束日期相同,将使用备用表示法。例如,标题将以以下两种方式之一显示
For Friday, July 25, 2014 // for one date only
From Friday, July 25, 2014 to Saturday, July 26, 2014 // for a range of dates
你也可以将样式与范围分隔符结合起来,例如
range_short_title: From 7/25/2014 to 7/26/2014
short_title: (same)
你还可以在配置文件中指定闭包以执行更复杂的计算,例如两个日期之间的天数差异。例如,
'days' => function($start, $end) {
return $end->diffInDays($start);
},
请注意,如果日期不是有效对象(例如,一个或两个日期不可用),则对于任何计算将返回配置值 none.calculations
。
如果你想要更改不存在值的默认返回值,可以调用格式化方法
$a = DateRange::make(DateRange::none());
$a->format('start','style','format-if-empty');
其他范围函数
有几个比较函数,包括
isSameDay() // start and end are on the same day
onSameDay() // (same)
fullDay() // from the beginning of day1 to the end of day2
overlaps($other) // returns True if this range overlaps another
isAdjacentTo($other) // returns True if this range is adjacent to another