PHPackages                             jstewmc/interval - 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. jstewmc/interval

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

jstewmc/interval
================

A set of numbers between two endpoints

v1.0.0(9y ago)0582MITPHPPHP ^7.0

Since Aug 6Pushed 9y ago1 watchersCompare

[ Source](https://github.com/jstewmc/interval)[ Packagist](https://packagist.org/packages/jstewmc/interval)[ RSS](/packages/jstewmc-interval/feed)WikiDiscussions master Synced 4w ago

READMEChangelogDependencies (1)Versions (4)Used By (2)

interval
========

[](#interval)

A set of numbers between two endpoints.

```
use Jstewmc\Interval;

// create an interval between 2 (exclusive) and 4 (inclusive)
$interval = new Interval('(2, 4]');

// compare values
$interval->compare(1);  // returns -1
$interval->compare(2);  // returns -1
$interval->compare(3);  // returns 0
$interval->compare(4);  // returns 0
$interval->compare(5);  // returns 1

// echo the interval
echo $interval;  // returns "(2, 4]"
```

Syntax
------

[](#syntax)

This library supports standard US interval syntax requiring (in order):

- an open-bracket (`[`) or open-parentheses (`(`);
- a number, positive infinity (`INF`), or negative infinity (`-INF`);
- a comma-space (`, `);
- a number, positive infinity (`INF`), or negative infinity (`-INF`); and,
- a close-bracket (`]`) or close-parentheses (`)`).

Positive or negative floats, integers, and infinity are accepted.

For example:

- `(2, 4]` represents 2 &lt; *x* &lt;= 4
- `(-10.5, 10.5)` represents -10.5 &lt; *x* &lt; 10.5
- `[0, INF)` represents 0 &lt;= *x* &lt; ∞
- `(-INF, INF)` represents -∞ &lt; *x* &lt; ∞

Keep in mind, this library does not support *reverse-bracket* syntax (e.g., `]2, 4]`) or *semi-colon separated* syntax (e.g., `[2; 4]`).

Usage
-----

[](#usage)

You can instantiate an interval from a string or create it manually using the set methods:

```
use Jstewmc\Interval;

$a = new Interval('(2, 4]');

$b = (new Interval())
    ->setLowerExclusive()
    ->setLower(2)
    ->setUpper(4)
    ->setUpperInclusive();

$a == $b;  // returns true
```

Keep in mind, when instantiating an interval from a string, an `InvalidArgumentException` will be thrown if the interval's syntax is invalid:

```
use Jstewmc\Interval;

new Interval('[0; 0]');      // throws exception (semicolon syntax not supported)
new Interval(']0, 2]');      // throws exception (reverse brackets not supported)
new Interval('[foo, bar]');  // throws exception (use numbers or INF)
new Interval('[0, 0)');      // throws exception (same endpoint, different boundary)
new Interval('[1, -1]');     // throws exception (upper- is less than lower-bound)
```

Infinity is supported as the string `'INF'` or the `INF` [predefined constant](http://php.net/manual/en/math.constants.php):

```
use Jstewmc\Interval;

$a = new Interval('(-INF, 0]');

$b = (new Interval())
    ->setLowerExclusive()
    ->setLower(-INF)
    ->setUpper(0)
    ->setUpperInclusive(true);

$a == $b;  // returns true
```

You can compare a value to the interval using the `compare()` method. The `compare()` method will return `-1`, `0`, or `1` if the value is *below*, *inside*, or *above* the interval, respectively:

```
use Jstewmc\Interval;

$interval = new Interval('(2, 4]');

$interval->compare(1);  // returns -1
$interval->compare(2);  // returns -1
$interval->compare(3);  // returns 0
$interval->compare(4);  // returns 0
$interval->compare(5);  // returns 1
```

You can get any of the interval's settings with the get methods:

```
use Jstewmc\Interval;

$interval = new Interval('(2, 4]');

$interval->getIsLowerInclusive();  // returns false
$interval->getLower();             // returns 2
$interval->getUpper();             // returns 4
$interval->getIsUpperInclusive();  // returns true
```

There are a few convenience methods to make getting and setting the boundaries eaiser:

```
use Jstewmc\Interval;

$interval = new Interval('(2, 4]');

$interval->isLowerInclusive();  // returns false
$interval->isLowerExclusive();  // returns true
$interval->isUpperInclusive();  // returns true
$interval->isUpperExclusive();  // returns false

echo $interval->setLowerInclusive();  // prints "[2, 4]"
echo $interval->setLowerExclusive();  // prints "(2, 4]"
echo $interval->setUpperInclusive();  // prints "(2, 4]"
echo $interval->setUpperExclusive();  // prints "(2, 4)"
```

That's about it!

License
-------

[](#license)

[MIT](https://github.com/jstewmc/interval/blob/master/LICENSE)

Author
------

[](#author)

[Jack Clayton](mailto:clayjs0@gmail.com)

Version
-------

[](#version)

### 1.0.0, August 13, 2016

[](#100-august-13-2016)

- Major release
- Update `composer.json`

### 0.2.0, August 7, 2016

[](#020-august-7-2016)

- Add support for infinity (e.g., `'(-INF, 0]'`).
- Update error messages to be a little more informative.
- Update README examples.

### 0.1.0, August 6, 2016

[](#010-august-6-2016)

- Initial release

###  Health Score

27

—

LowBetter than 47% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity60

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 ~4 days

Total

3

Last Release

3608d ago

Major Versions

v0.2.0 → v1.0.02016-08-13

### Community

Maintainers

![](https://www.gravatar.com/avatar/50fecae0a7fd2119681bc133e496e7166b01a59f850a3c909e100bd427c6b28b?d=identicon)[Jstewmc](/maintainers/Jstewmc)

---

Top Contributors

[![jstewmc](https://avatars.githubusercontent.com/u/1192893?v=4)](https://github.com/jstewmc "jstewmc (12 commits)")

---

Tags

phpintervaljstewmc

### Embed Badge

![Health badge](/badges/jstewmc-interval/health.svg)

```
[![Health](https://phpackages.com/badges/jstewmc-interval/health.svg)](https://phpackages.com/packages/jstewmc-interval)
```

###  Alternatives

[kirouane/interval

Library to handel intervals

2877.3k](/packages/kirouane-interval)

PHPackages © 2026

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