brtriver/date-range

PHP的简单日期范围

v1.1 2015-12-29 16:32 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:09:45 UTC


README

Build Status Scrutinizer Code Quality Code Coverage

DateRange是PHP中日期范围的简单表示。

要求

DateRange与PHP 5.4.0或更高版本兼容。

安装

推荐使用composer安装date-range。

$ composer require brtriver/date-range

使用

实例

传递以下两个日期(开始和结束)参数

use Brtriver\DateRange\DateRange;
$range = new DateRange('2015-12-01', '2015-12-31');

或传递日期数组

$range = new DateRange(['2015-12-01', '2015-12-31']);

不仅接受字符串格式,也接受DateTime对象

$start = new DateTime('2012-12-01');
$end = new DateTime('2012-12-31');
$range = new DateRange([$start, $end]);

异常

如果DateRange无法接受构造参数,它将抛出InvalidArgumentException异常。因此,在短范围内,您必须捕获该异常。

try {
  $range = new DateRange('tomorrow', 'today');
} catch (\InvalidArgumentException $e) {
  echo $e->getMessage();
  // end date is the day before than start date
}

访问两个日期

DateRange有2个日期作为DateTime对象。您可以使用getter方法访问它们。

# if you get start DateTime object.
$start = $range->getStart();

# if you get end DateTime object.
$end = $range->getEnd();

包含

## check contains specific date
var_dump($range->contains('2015-12-10'));
// bool(true)

var_dump($range->contains('2017-01-10'));
// bool(false)

差值

获取开始和结束日期之间的DateInterval以调用diff

$range = new DateRange('2015-12-01', '2015-12-03');
$range->diff()->format('%R%a days');
// +2 days

toString

获取开始和结束日期字符串以输出实例

$range = new DateRange('2015-12-01', '2015-12-03');
echo $range;
// '2015-12-01 ~ 2015-12-03'

如果您想更改格式,请使用您的格式和分隔符调用toString方法

$range = new DateRange('2015-12-01', '2015-12-03');
echo $range->toString('Y/m/d', '-');
// '2015/12/01 - 2015/12/03'

周期

您可以在foreach中使用DateRange。

foreach ($range as $d) {
    echo $d->format('Y-m-d') . PHP_EOL;
}

如果您直接使用DatePeriod对象,您也可以通过以下方式通过getDatePeriod获取DatePeriod对象

foreach ($range->getDatePeriod() as $d) {
    echo $d->format('Y-m-d') . PHP_EOL;
}
// 2015-12-01
// 2015-12-02
// 2015-12-03
// 2015-12-04
// ...
// 2015-12-28
// 2015-12-29
// 2015-12-30
// 2015-12-31

默认间隔设置为P1D。如果您想更改间隔,请调用setInterval

## if you want to change interval, use setInterval()
$start = new DateTime('2012-12-01');
$end = new DateTime('2020-12-31');
$range = new DateRange([$start, $end]);
$range->setInterval(new DateInterval('P1Y')); // change from 'P1D' (Default)
foreach ($range->getDatePeriod() as $d) {
    echo $d->format('Y-m-d') . PHP_EOL;
}
// 2012-12-01
// 2013-12-01
// 2014-12-01
// 2015-12-01
// 2016-12-01
// 2017-12-01
// 2018-12-01
// 2019-12-01
// 2020-12-01

排除开始或结束日期

如果您想排除范围中的开始(结束)日期,请调用以下方式中的excludeStartDate()excludeEndDate()

// exclude start date
$range = new DateRange('2015-12-01', '2015-12-03');
$range->excludeStartDate();
foreach ($range => $d) {
    echo $d->format('Y-m-d') . PHP_EOL;
}
// 2015-12-02
// 2015-12-03

// exclude end date
$range = new DateRange('2015-12-01', '2015-12-03');
$range->excludeEndDate();
foreach ($range => $d) {
    echo $d->format('Y-m-d') . PHP_EOL;
}
// 2015-12-01
// 2015-12-02

尝试演示

如果您要显示演示,只需运行make demo

cd ./vendor/brtriver/date-range
make setup
make install
make demo

许可协议

DateRange采用MIT许可协议。