, (*1)
With spatie/opening-hours you create an object that describes a business' opening hours, which you can query for open or closed on days or specific dates, or use to present the times per day., (*2)
A set of opening hours is created by passing in a regular schedule, and a list of exceptions., (*3)
$openingHours = OpeningHours::create([
'monday' => ['09:00-12:00', '13:00-18:00'],
'tuesday' => ['09:00-12:00', '13:00-18:00'],
'wednesday' => ['09:00-12:00'],
'thursday' => ['09:00-12:00', '13:00-18:00'],
'friday' => ['09:00-12:00', '13:00-20:00'],
'saturday' => ['09:00-12:00', '13:00-16:00'],
'sunday' => [],
'exceptions' => [
'2016-11-11' => ['09:00-12:00'],
'2016-12-25' => [],
],
]);
The object can be queried for a day in the week, which will return a result based on the regular schedule:, (*4)
// Open on Mondays:
$openingHours->isOpenOn('monday'); // true
// Closed on Sundays:
$openingHours->isOpenOn('sunday'); // false
It can also be queried for a specific date and time:, (*5)
// Closed because it's after hours:
$openingHours->isOpenAt(new DateTime('2016-09-26 19:00:00')); // false
// Closed because Christmas was set as an exception
$openingHours->isOpenAt(new DateTime('2016-12-25')); // false
It can also return arrays of opening hours for a week or a day:, (*6)
// OpeningHoursForDay object for the regular schedule
$openingHours->forDay('monday');
// OpeningHoursForDay[] for the regular schedule, keyed by day name
$openingHours->forWeek();
// OpeningHoursForDay object for a specific day
$openingHours->forDate(new DateTime('2016-12-25'));
// OpeningHoursForDay[] of all exceptions, keyed by date
$openingHours->exceptions();
Read the usage section for the full api., (*7)
Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website., (*8)
Postcardware
You're free to use this package (it's MIT-licensed), but if it makes it to your production environment you are required to send us a postcard from your hometown, mentioning which of our package(s) you are using., (*9)
Our address is: Spatie, Samberstraat 69D, 2060 Antwerp, Belgium., (*10)
The best postcards will get published on the open source page on our website., (*11)
Installation
You can install the package via composer:, (*12)
``` bash
composer require spatie/opening-hours, (*13)
## Usage
The package should only be used through the `OpeningHours` class. There are also three value object classes used throughout, `Time`, which represents a single time, `TimeRange`, which represents a period with a start and an end, and `openingHoursForDay`, which represents a set of `TimeRange`s which can't overlap.
### `Spatie\OpeningHours\OpeningHours`
#### `OpeningHours::create(array $data): Spatie\OpeningHours\OpeningHours`
Static factory method to fill the set of opening hours.
``` php
$openingHours = OpeningHours::create([
'monday' => ['09:00-12:00', '13:00-18:00'],
// ...
]);
Not all days are mandatory, if a day is missing, it will be set as closed., (*14)
OpeningHours::fill(array $data): Spatie\OpeningHours\OpeningHours
The same as create, but non-static., (*15)
``` php
$openingHours = (new OpeningHours)->fill([
'monday' => ['09:00-12:00', '13:00-18:00'],
// ...
]);, (*16)
#### `OpeningHours::forWeek(): Spatie\OpeningHours\OpeningHoursForDay[]`
Returns an array of `OpeningHoursForDay` objects for a regular week.
```php
$openingHours->forWeek();
OpeningHours::forDay(string $day): Spatie\OpeningHours\OpeningHoursForDay
Returns an OpeningHoursForDay object for a regular day. A day is lowercase string of the english day name., (*17)
$openingHours->forDay('monday');
OpeningHours::forDate(DateTime $dateTime): Spatie\OpeningHours\OpeningHoursForDay
Returns an OpeningHoursForDay object for a specific date. It looks for an exception on that day, and otherwise it returns the opening hours based on the regular schedule., (*18)
$openingHours->forDate(new DateTime('2016-12-25'));
OpeningHours::exceptions(): Spatie\OpeningHours\OpeningHoursForDay[]
Returns an array of all OpeningHoursForDay objects for exceptions, keyed by a Y-m-d date string., (*19)
$openingHours->exceptions();
OpeningHours::isOpenOn(string $day): bool
Checks if the business is op on a day in the regular schedule., (*20)
$openingHours->isOpenOn('saturday');
OpeningHours::isClosedOn(string $day): bool
Checks if the business is closed on a day in the regular schedule., (*21)
$openingHours->isClosedOn('sunday');
OpeningHours::isOpenAt(DateTime $dateTime): bool
Checks if the business is open on a specific day, at a specific time., (*22)
$openingHours->isOpenAt(new DateTime('2016-26-09 20:00'));
OpeningHours::isClosedAt(DateTime $dateTime): bool
Checks if the business is closed on a specific day, at a specific time., (*23)
$openingHours->isClosedAt(new DateTime('2016-26-09 20:00'));
OpeningHours::isOpen(): bool
Checks if the business is open right now., (*24)
$openingHours->isOpen();
OpeningHours::isClosed(): bool
Checks if the business is closed right now., (*25)
$openingHours->isClosed();
Spatie\OpeningHours\OpeningHoursForDay
This class is meant as read-only. It implements ArrayAccess, Countable and IteratorAggregate so you can process the list of TimeRanges in an array-like way., (*26)
Spatie\OpeningHours\TimeRange
Value object describing a period with a start and an end time. Can be casted to a string in a H:i-H:i format., (*27)
Spatie\OpeningHours\Time
Value object describing a single time. Can be casted to a string in a H:i format., (*28)
Changelog
Please see CHANGELOG for more information what has changed recently., (*29)
Testing
bash
$ composer test, (*30)
Contributing
Please see CONTRIBUTING for details., (*31)
Security
If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker., (*32)
Credits
About Spatie
Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website., (*33)
License
The MIT License (MIT). Please see License File for more information., (*34)