PHPackages                             brtriver/date-range - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. brtriver/date-range

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

brtriver/date-range
===================

Simple date ranges for PHP

v1.1(10y ago)949.9k↓12.5%4[2 issues](https://github.com/brtriver/date-range/issues)[1 PRs](https://github.com/brtriver/date-range/pulls)MITPHPPHP &gt;=5.4.0

Since Dec 27Pushed 7y ago1 watchersCompare

[ Source](https://github.com/brtriver/date-range)[ Packagist](https://packagist.org/packages/brtriver/date-range)[ RSS](/packages/brtriver-date-range/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (8)DependenciesVersions (9)Used By (0)

DateRange -- Simple Date Range Object for PHP
=============================================

[](#daterange----simple-date-range-object-for-php)

[![Build Status](https://camo.githubusercontent.com/3bab374160c26c5283f8cc471cdef11dfc973fdc5d9ad515d279042cdf913d4b/68747470733a2f2f7472617669732d63692e6f72672f62727472697665722f646174652d72616e67652e737667)](https://travis-ci.org/brtriver/date-range)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/d344dd7d5570bfbae85f5de0a8b2657fe28009be1823ea8814b7bfb8ff4bf137/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f62727472697665722f646174652d72616e67652f6261646765732f7175616c6974792d73636f72652e706e673f623d6d617374657226743d3230313531323330)](https://scrutinizer-ci.com/g/brtriver/date-range/?branch=master)[![Code Coverage](https://camo.githubusercontent.com/7a7382c98a69076d2371f52ea932bd3dbd6031d25b295c2bf181d0afb9ba8c21/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f62727472697665722f646174652d72616e67652f6261646765732f636f7665726167652e706e673f623d6d617374657226743d3230313531323330)](https://scrutinizer-ci.com/g/brtriver/date-range/?branch=master)

DateRange is a simple representation of date range for PHP.

Requirements
------------

[](#requirements)

DateRange works with PHP 5.4.0 or later.

Install
-------

[](#install)

The recommended way to install date-range is with composer.

```
$ composer require brtriver/date-range
```

Usage
-----

[](#usage)

### Instance

[](#instance)

Pass two date(start and end) args like below:

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

or Pass array of date :

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

Not only string format but DateTime object is also accepted :

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

### Exception

[](#exception)

if DateRange cannot accept construct parameters, it throw InvalidArgumentException. So in a short scope, you have to catch the exception.

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

### access two date

[](#access-two-date)

DateRange has 2 date as DateTime object. and you can access with getter methods.

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

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

### contains

[](#contains)

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

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

### diff

[](#diff)

get DateInterval between start and end date to call `diff`:

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

### toString

[](#tostring)

get start and end date string to echo the instance:

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

If you want to change the format, to call `toString` method with your format and separator:

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

### Period

[](#period)

You can use DateRange in foreach.

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

If you use DatePeriod object directly, you can also get DatePeriod object through `getDatePeriod` like below:

```
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
```

Default interval is set to `P1D`. If you want to change interval, call `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
```

exclude start or end date
-------------------------

[](#exclude-start-or-end-date)

If you want to exclude start (end) date in range, call `excludeStartDate()` or `excludeEndDate()` like below:

```
// 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
```

try demo
--------

[](#try-demo)

If you show demo, you have only to run `make demo`.

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

License
-------

[](#license)

DateRange is licensed under the MIT license.

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance16

Infrequent updates — may be unmaintained

Popularity35

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

8

Last Release

3793d ago

Major Versions

v0.6 → v1.02015-12-29

### Community

Maintainers

![](https://www.gravatar.com/avatar/a8833660f7d5586520ef2b32f3e91c2a8cd08e260fe02150535a882d8dc6ba14?d=identicon)[brtriver](/maintainers/brtriver)

---

Top Contributors

[![brtriver](https://avatars.githubusercontent.com/u/111285?v=4)](https://github.com/brtriver "brtriver (31 commits)")

### Embed Badge

![Health badge](/badges/brtriver-date-range/health.svg)

```
[![Health](https://phpackages.com/badges/brtriver-date-range/health.svg)](https://phpackages.com/packages/brtriver-date-range)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
