kalani / date-range

Laravel 5 包,方便处理格式化日期范围

v0.2.1 2015-07-09 03:43 UTC

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