brtriver / date-range
Simple date ranges for PHP
Installs: 48 852
Dependents: 0
Suggesters: 0
Security: 0
Stars: 9
Watchers: 2
Forks: 4
Open Issues: 3
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-11-09 18:59:28 UTC
README
DateRange is a simple representation of date range for PHP.
Requirements
DateRange works with PHP 5.4.0 or later.
Install
The recommended way to install date-range is with composer.
$ composer require brtriver/date-range
Usage
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
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
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
## check contains specific date var_dump($range->contains('2015-12-10')); // bool(true) var_dump($range->contains('2017-01-10')); // bool(false)
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
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
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
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
If you show demo, you have only to run make demo
.
cd ./vendor/brtriver/date-range
make setup
make install
make demo
License
DateRange is licensed under the MIT license.