PHP code example of ckuran / period
1. Go to this page and download the library: Download ckuran/period library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ckuran / period example snippets
$period = new Period(
DateTimeImmutable $start
, DateTimeImmutable $end
[, ?int $precisionMask = Precision::DAY]
[, ?int $boundaryExclusionMask = Boundaries::EXCLUDE_NONE]
)
$period = Period::make(
string|DateTimeInterface $start
, string|DateTimeInterface $end
[, ?int Precision::DAY]
[, ?int Boundaries::EXCLUDE_NONE]
[, string $format]
)
$period->length(): int
$period->startIncluded(): bool
$period->startExcluded(): bool
$period->endIncluded(): bool
$period->endExcluded(): bool
$period->getStart(): DateTimeImmutable
$period->getStartIncluded(): DateTimeImmutable
$period->getEnd(): DateTimeImmutable
$period->getEndIncluded(): DateTimeImmutable
$period->contains(DateTimeInterface $date): bool
$period->equals(Period $period): bool
$period->overlapsWith(Period $period): bool
$period->touchesWith(Period $period): bool
$period->startsAt(DateTimeInterface $date): bool
$period->startsBefore(DateTimeInterface $date): bool
$period->startsBeforeOrAt(DateTimeInterface $date): bool
$period->startsAfter(DateTimeInterface $date): bool
$period->startsAfterOrAt(DateTimeInterface $date): bool
$period->endsAt(DateTimeInterface $date): bool
$period->endsBefore(DateTimeInterface $date): bool
$period->endsBeforeOrAt(DateTimeInterface $date): bool
$period->endsAfter(DateTimeInterface $date): bool
$period->endsAfterOrAt(DateTimeInterface $date): bool
$period->gap(Period $period): ?Period
$period->overlapSingle(Period $period): ?Period
$period->overlap(Period ...$periods): PeriodCollection
$period->overlapAll(Period ...$periods): Period
$period->diffSingle(Period $period): PeriodCollection
$period->diff(Period ...$periods): PeriodCollection
$periodCollection->overlap(PeriodCollection ...$periodCollections): PeriodCollection
$periodCollection->overlapSingle(PeriodCollection $periodCollection): PeriodCollection
$periodCollection->map(Closure<Period> $closure): PeriodCollection
$periodCollection->reduce(Closure<mixed, Period> $closure): mixed
$periodCollection->boundaries(): ?Period
$periodCollection->gaps(): PeriodCollection
/*
* A [========]
* B [==]
* C [=====]
* CURRENT [===============]
*
* OVERLAP [=] [==] [=]
*/
$a = Period::make('2018-01-01', '2018-01-31');
$b = Period::make('2018-02-10', '2018-02-20');
$c = Period::make('2018-03-01', '2018-03-31');
$current = Period::make('2018-01-20', '2018-03-10');
$overlaps = $current->overlap($a, $b, $c);
/*
* A [============]
* B [==]
* C [=======]
*
* OVERLAP [==]
*/
$a = Period::make('2018-01-01', '2018-01-31');
$b = Period::make('2018-01-10', '2018-01-15');
$c = Period::make('2018-01-10', '2018-01-31');
$overlap = $a->overlapAll($b, $c);
/*
* A [====]
* B [========]
* C [=====]
* CURRENT [========================]
*
* DIFF [=] [====]
*/
$a = Period::make('2018-01-05', '2018-01-10');
$b = Period::make('2018-01-15', '2018-03-01');
$c = Period::make('2017-01-01', '2018-01-02');
$current = Period::make('2018-01-01', '2018-01-31');
$diff = $current->diff($a, $b, $c);
/*
* A [============]
* B [===========]
*/
$a = Period::make('2018-01-01', '2018-01-31');
$b = Period::make('2018-01-10', '2018-02-15');
$overlap = $a->overlapsWith($b); // true
/*
* A [========]
* B [===========]
*/
$a = Period::make('2018-01-01', '2018-01-31');
$b = Period::make('2018-02-01', '2018-02-15');
$overlap = $a->touchesWith($b); // true
/*
* A [========]
* B [===========]
*/
$a = Period::make('2018-01-01', '2018-01-31');
$b = Period::make('2018-02-05', '2018-02-15');
$overlap = $a->gap($b); // Period('2018-02-01', '2018-02-04')
/*
* A [====]
* B [========]
* C [=====]
* D [====]
*
* BOUNDARIES [======================================]
*/
$collection = new PeriodCollection(
Period::make('2018-01-01', '2018-01-05'),
Period::make('2018-01-10', '2018-01-15'),
Period::make('2018-01-20', '2018-01-25'),
Period::make('2018-01-30', '2018-01-31')
);
$boundaries = $collection->boundaries();
/*
* A [====]
* B [========]
* C [=====]
* D [====]
*
* GAPS [=] [====] [==]
*/
$collection = new PeriodCollection(
Period::make('2018-01-01', '2018-01-05'),
Period::make('2018-01-10', '2018-01-15'),
Period::make('2018-01-20', '2018-01-25'),
Period::make('2018-01-30', '2018-01-31')
);
$gaps = $collection->gaps();
/*
* A [=====] [===========]
* B [=================]
* C [====================]
*
* OVERLAP [=] [====]
*/
$a = new PeriodCollection(
Period::make('2018-01-01', '2018-01-07'),
Period::make('2018-01-15', '2018-01-25')
);
$b = new PeriodCollection(
Period::make('2018-01-01', '2018-01-20')
);
$c = new PeriodCollection(
Period::make('2018-01-06', '2018-01-25')
);
$overlap = $a->overlap($b, $c);
$collection = new PeriodCollection(
Period::make('2018-01-01', '2018-01-02'),
// …
);
$collection = new PeriodCollection(/* … */);
foreach ($collection as $period) {
$period->…
}
[$firstPeriod, $secondPeriod, $thirdPeriod] = $collection;
$newCollection = new PeriodCollection(...$otherCollection);
Period::make('2018-01-01', '2018-02-01', Precision::DAY);
Precision::YEAR
Precision::MONTH
Precision::DAY
Precision::HOUR
Precision::MINUTE
Precision::SECOND
$a = Period::make('2018-01-01', '2018-02-01');
$b = Period::make('2018-02-01', '2018-02-28');
$a->overlapsWith($b); // true
$a = Period::make('2018-01-01', '2018-01-31');
$a->length(); // 31
$a = Period::make('2018-01-01', '2018-02-01', null, Boundaries::EXCLUDE_END);
$b = Period::make('2018-02-01', '2018-02-28', null, Boundaries::EXCLUDE_END);
$a->overlapsWith($b); // false
Boundaries::EXCLUDE_NONE;
Boundaries::EXCLUDE_START;
Boundaries::EXCLUDE_END;
Boundaries::EXCLUDE_ALL;
Period::make(Carbon::make('2018-01-01'), Carbon::make('2018-01-02'));
$datePeriod = Period::make(Carbon::make('2018-01-01'), Carbon::make('2018-01-31'));
foreach ($datePeriod as $date) {
/** @var DateTimeImmutable $date */
// 2018-01-01
// 2018-01-02
// ...
// (31 iterations)
}
$timePeriod = Period::make(Carbon::make('2018-01-01 00:00:00'), Carbon::make('2018-01-01 23:59:59'), Precision::HOUR);
foreach ($timePeriod as $time) {
/** @var DateTimeImmutable $time */
// 2018-01-01 00:00:00
// 2018-01-01 01:00:00
// ...
// (24 iterations)
}
$visualizer = new Visualizer(["width" => 27]);
$visualizer->visualize([
"A" => Period::make('2018-01-01', '2018-01-31'),
"B" => Period::make('2018-02-10', '2018-02-20'),
"C" => Period::make('2018-03-01', '2018-03-31'),
"D" => Period::make('2018-01-20', '2018-03-10'),
"OVERLAP" => new PeriodCollection(
Period::make('2018-01-20', '2018-01-31'),
Period::make('2018-02-10', '2018-02-20'),
Period::make('2018-03-01', '2018-03-10')
),
]);
$visualizer = new Visualizer(["width" => 10]);
A [========]
B [==]
C [========]
D [==============]
OVERLAP [===] [==] [==]