С помощью spatie/opening-hours
вы создаете объект, описывающий часы работы предприятия, который вы можете запросить об open
или closed
в определенные дни или определенные даты или использовать для представления времени в день.
spatie/opening-hours
можно использовать непосредственно в Carbon благодаря cmixin/business-time, так что вы можете использовать функции часов работы непосредственно в своих расширенных объектах даты.
Набор часов работы создается путем передачи регулярного расписания и списка исключений.
// Add the use at the top of each file where you want to use the OpeningHours class:
use Spatie OpeningHours OpeningHours ;
$ 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 ' => [],
' 01-01 ' => [], // Recurring on each 1st of January
' 12-25 ' => [ ' 09:00-12:00 ' ], // Recurring on each 25th of December
],
]);
// This will allow you to display things like:
$ now = new DateTime ( ' now ' );
$ range = $ openingHours -> currentOpenRange ( $ now );
if ( $ range ) {
echo " It's open since " . $ range -> start (). "n" ;
echo " It will close at " . $ range -> end (). "n" ;
} else {
echo " It's closed since " . $ openingHours -> previousClose ( $ now )-> format ( ' l H:i ' ). "n" ;
echo " It will re-open at " . $ openingHours -> nextOpen ( $ now )-> format ( ' l H:i ' ). "n" ;
}
К объекту можно запросить день недели, который вернет результат на основе обычного расписания:
// Open on Mondays:
$ openingHours -> isOpenOn ( ' monday ' ); // true
// Closed on Sundays:
$ openingHours -> isOpenOn ( ' sunday ' ); // false
Его также можно запросить для конкретной даты и времени:
// 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 -> isOpenOn ( ' 2016-12-25 ' ); // false
Он также может возвращать массивы часов работы за неделю или день:
// OpeningHoursForDay object for the regular schedule
$ openingHours -> forDay ( ' monday ' );
// OpeningHoursForDay[] for the regular schedule, keyed by day name
$ openingHours -> forWeek ();
// Array of day with same schedule for the regular schedule, keyed by day name, days combined by working hours
$ openingHours -> forWeekCombined ();
// OpeningHoursForDay object for a specific day
$ openingHours -> forDate ( new DateTime ( ' 2016-12-25 ' ));
// OpeningHoursForDay[] of all exceptions, keyed by date
$ openingHours -> exceptions ();
При построении вы можете установить флаг превышения времени в днях. Например, ночной клуб работает до 3 часов ночи в пятницу и субботу:
$ openingHours = Spatie OpeningHours OpeningHours:: create ([
' overflow ' => true ,
' friday ' => [ ' 20:00-03:00 ' ],
' saturday ' => [ ' 20:00-03:00 ' ],
], null );
Это позволяет API дополнительно использовать данные за предыдущий день, чтобы проверить, открыты ли часы работы в соответствующем временном диапазоне.
Вы можете добавлять данные в определения, а затем получать их:
$ openingHours = OpeningHours:: create ([
' monday ' => [
' data ' => ' Typical Monday ' ,
' 09:00-12:00 ' ,
' 13:00-18:00 ' ,
],
' tuesday ' => [
' 09:00-12:00 ' ,
' 13:00-18:00 ' ,
[
' 19:00-21:00 ' ,
' data ' => ' Extra on Tuesday evening ' ,
],
],
' exceptions ' => [
' 2016-12-25 ' => [
' data ' => ' Closed for Christmas ' ,
],
],
]);
echo $ openingHours -> forDay ( ' monday ' )-> data ; // Typical Monday
echo $ openingHours -> forDate ( new DateTime ( ' 2016-12-25 ' ))-> data ; // Closed for Christmas
echo $ openingHours -> forDay ( ' tuesday ' )[ 2 ]-> data ; // Extra on Tuesday evening
В приведенном выше примере данные представляют собой строки, но это может быть любое значение. Таким образом, вы можете встроить несколько свойств в массив.
Для удобства структуры пара данные-часы может быть полностью ассоциативным массивом, поэтому приведенный выше пример строго эквивалентен следующему:
$ openingHours = OpeningHours:: create ([
' monday ' => [
' hours ' => [
' 09:00-12:00 ' ,
' 13:00-18:00 ' ,
],
' data ' => ' Typical Monday ' ,
],
' tuesday ' => [
[ ' hours ' => ' 09:00-12:00 ' ],
[ ' hours ' => ' 13:00-18:00 ' ],
[ ' hours ' => ' 19:00-21:00 ' , ' data ' => ' Extra on Tuesday evening ' ],
],
// Open by night from Wednesday 22h to Thursday 7h:
' wednesday ' => [ ' 22:00-24:00 ' ], // use the special "24:00" to reach midnight included
' thursday ' => [ ' 00:00-07:00 ' ],
' exceptions ' => [
' 2016-12-25 ' => [
' hours ' => [],
' data ' => ' Closed for Christmas ' ,
],
],
]);
Вы можете использовать разделитель to
указания нескольких дней одновременно, для недели или для исключений:
$ openingHours = OpeningHours:: create ([
' monday to friday ' => [ ' 09:00-19:00 ' ],
' saturday to sunday ' => [],
' exceptions ' => [
// Every year
' 12-24 to 12-26 ' => [
' hours ' => [],
' data ' => ' Holidays ' ,
],
// Only happening in 2024
' 2024-06-25 to 2024-07-01 ' => [
' hours ' => [],
' data ' => ' Closed for works ' ,
],
],
]);
Последний инструмент структуры — это фильтр. Он позволяет передавать замыкания (или ссылку на вызываемую функцию/метод), которые принимают дату в качестве параметра и возвращают настройки для данной даты.
$ openingHours = OpeningHours:: create ([
' monday ' => [
' 09:00-12:00 ' ,
],
' filters ' => [
function ( $ date ) {
$ year = intval ( $ date -> format ( ' Y ' ));
$ easterMonday = new DateTimeImmutable ( ' 2018-03-21 + ' .( easter_days ( $ year ) + 1 ). ' days ' );
if ( $ date -> format ( ' m-d ' ) === $ easterMonday -> format ( ' m-d ' )) {
return []; // Closed on Easter Monday
// Any valid exception-array can be returned here (range of hours, with or without data)
}
// Else the filter does not apply to the given date
},
],
]);
Если вызываемый объект найден в свойстве "exceptions"
, он будет автоматически добавлен в фильтры, поэтому вы можете смешивать фильтры и исключения в массиве исключений . Первый фильтр, возвращающий ненулевое значение, будет иметь приоритет над следующими фильтрами, а массив фильтров имеет приоритет над фильтрами внутри массива исключений .
Предупреждение: мы будем циклически использовать все фильтры для каждой даты, из которой нам нужно получить часы работы, и не можем ни предикатировать, ни кэшировать результат (это может быть случайная функция), поэтому вы должны быть осторожны с фильтрами, слишком большим количеством фильтров или длительным процессом внутри фильтров. может оказать существенное влияние на производительность.
Он также может возвращать дату следующего открытия или закрытия DateTime
из заданного DateTime
.
// The next open datetime is tomorrow morning, because we’re closed on 25th of December.
$ nextOpen = $ openingHours -> nextOpen ( new DateTime ( ' 2016-12-25 10:00:00 ' )); // 2016-12-26 09:00:00
// The next open datetime is this afternoon, after the lunch break.
$ nextOpen = $ openingHours -> nextOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' )); // 2016-12-24 13:00:00
// The next close datetime is at noon.
$ nextClose = $ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 10:00:00 ' )); // 2016-12-24 12:00:00
// The next close datetime is tomorrow at noon, because we’re closed on 25th of December.
$ nextClose = $ openingHours -> nextClose ( new DateTime ( ' 2016-12-25 15:00:00 ' )); // 2016-12-26 12:00:00
Прочтите раздел об использовании для получения полной версии API.
Spatie — агентство веб-дизайна, базирующееся в Антверпене, Бельгия. На нашем сайте вы найдете обзор всех наших проектов с открытым исходным кодом.
Мы вкладываем много ресурсов в создание лучших в своем классе пакетов с открытым исходным кодом. Вы можете поддержать нас, купив один из наших платных продуктов.
Мы очень признательны вам за отправку нам открытки из вашего родного города с указанием того, какой из наших пакетов вы используете. Наш адрес вы найдете на странице контактов. Все полученные открытки мы публикуем на нашей виртуальной стене открыток.
Вы можете установить пакет через композитор:
composer require spatie/opening-hours
Пакет следует использовать только через класс OpeningHours
. Также повсюду используются три класса объектов значений: Time
, который представляет одно время, TimeRange
, который представляет период с началом и концом, и openingHoursForDay
, который представляет набор TimeRange
, которые не могут перекрываться.
SpatieOpeningHoursOpeningHours
OpeningHours::create(array $data, $timezone = null, $toutputTimezone = null): SpatieOpeningHoursOpeningHours
Статический фабричный метод для заполнения набора часов работы.
$ openingHours = OpeningHours:: create ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
// ...
]);
Если часовой пояс не указан, OpeningHours
просто предполагает, что вы всегда передаете объекты DateTime
, часовой пояс которых уже соответствует вашему расписанию.
Если вы передадите $timezone
в качестве второго аргумента или через ключ массива 'timezone'
(это может быть либо объект DateTimeZone
, либо string
), то переданные даты будут преобразованы в этот часовой пояс в начале каждого метода, тогда если метод возвращает объект даты (например, nextOpen
, nextClose
, previousOpen
, previousClose
, currentOpenRangeStart
или currentOpenRangeEnd
), затем перед выводом он преобразуется обратно в исходный часовой пояс, поэтому объект может отражать момент по местному времени пользователя, в то время как OpeningHours
может придерживаться своего собственного часового пояса.
В качестве альтернативы вы также можете указать как входной, так и выходной часовой пояс (используя второй и третий аргумент) или используя массив:
$ openingHours = OpeningHours:: create ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
' timezone ' => [
' input ' => ' America/New_York ' ,
' output ' => ' Europe/Oslo ' ,
],
]);
OpeningHours::mergeOverlappingRanges(array $schedule) : array
В целях безопасности создание объекта OpeningHours
с перекрывающимися диапазонами вызовет исключение, если вы явно не укажете 'overflow' => true,
в определении массива часов открытия. Вы также можете явно объединить их.
$ ranges = [
' monday ' => [ ' 08:00-11:00 ' , ' 10:00-12:00 ' ],
];
$ mergedRanges = OpeningHours:: mergeOverlappingRanges ( $ ranges ); // Monday becomes ['08:00-12:00']
OpeningHours:: create ( $ mergedRanges );
// Or use the following shortcut to create from ranges that possibly overlap:
OpeningHours:: createAndMergeOverlappingRanges ( $ ranges );
Не все дни являются обязательными, если день пропущен, он будет отмечен как закрытый.
OpeningHours::fill(array $data): SpatieOpeningHoursOpeningHours
То же, что create
, но нестатическое.
$ openingHours = ( new OpeningHours )-> fill ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
// ...
]);
OpeningHours::forWeek(): SpatieOpeningHoursOpeningHoursForDay[]
Возвращает массив объектов OpeningHoursForDay
для обычной недели.
$ openingHours -> forWeek ();
OpeningHours::forWeekCombined(): array
Возвращает массив дней. Ключ массива — это первый день с одинаковыми часами, значения массива — это дни с одинаковыми рабочими часами и объект OpeningHoursForDay
.
$ openingHours -> forWeekCombined ();
OpeningHours::forWeekConsecutiveDays(): array
Возвращает массив объединенных дней, смежных дней с одинаковыми часами. Ключ массива — это первый день с одинаковыми часами, значения массива — это дни с одинаковыми рабочими часами и объект OpeningHoursForDay
.
Внимание : последовательные дни считаются с понедельника по воскресенье без зацикливания (понедельник не следует за воскресеньем) независимо от порядка дней в исходных данных.
$ openingHours -> forWeekConsecutiveDays ();
OpeningHours::forDay(string $day): SpatieOpeningHoursOpeningHoursForDay
Возвращает объект OpeningHoursForDay
для обычного дня. День — это строчная строка названия дня на английском языке.
$ openingHours -> forDay ( ' monday ' );
OpeningHours::forDate(DateTimeInterface $dateTime): SpatieOpeningHoursOpeningHoursForDay
Возвращает объект OpeningHoursForDay
для определенной даты. Он ищет исключение в этот день, а в противном случае возвращает часы работы в соответствии с обычным расписанием.
$ openingHours -> forDate ( new DateTime ( ' 2016-12-25 ' ));
OpeningHours::exceptions(): SpatieOpeningHoursOpeningHoursForDay[]
Возвращает массив всех объектов OpeningHoursForDay
для исключений, связанных строкой даты Ymd
.
$ openingHours -> exceptions ();
OpeningHours::isOpenOn(string $day): bool
Проверяет, открыто ли предприятие (содержит хотя бы 1 диапазон часов работы) в день обычного расписания.
$ openingHours -> isOpenOn ( ' saturday ' );
Если данная строка является датой, она проверит, открыта ли она (содержит хотя бы 1 диапазон часов работы), учитывая как обычный дневной график, так и возможные исключения.
$ openingHours -> isOpenOn ( ' 2020-09-03 ' );
$ openingHours -> isOpenOn ( ' 09-03 ' ); // If year is omitted, current year is used instead
OpeningHours::isClosedOn(string $day): bool
Проверяет, закрыто ли предприятие в какой-либо день в обычном расписании.
$ openingHours -> isClosedOn ( ' sunday ' );
OpeningHours::isOpenAt(DateTimeInterface $dateTime): bool
Проверяет, открыто ли предприятие в определенный день и в определенное время.
$ openingHours -> isOpenAt ( new DateTime ( ' 2016-26-09 20:00 ' ));
OpeningHours::isClosedAt(DateTimeInterface $dateTime): bool
Проверяет, закрыто ли предприятие в определенный день и в определенное время.
$ openingHours -> isClosedAt ( new DateTime ( ' 2016-26-09 20:00 ' ));
OpeningHours::isOpen(): bool
Проверяет, открыт ли бизнес прямо сейчас.
$ openingHours -> isOpen ();
OpeningHours::isClosed(): bool
Проверяет, закрыто ли предприятие прямо сейчас.
$ openingHours -> isClosed ();
OpeningHours::isAlwaysOpen(): bool
Проверяет, работает ли бизнес 24/7, не имеет исключений и фильтров.
if ( $ openingHours -> isAlwaysOpen ()) {
echo ' This business is open all day long every day. ' ;
}
OpeningHours::isAlwaysClosed(): bool
Проверяет, не открыт ли бизнес, нет ли исключений и фильтров.
OpeningHours
принимает пустой массив или список, в котором каждый день недели пуст, без каких-либо предубеждений.
Если это недопустимое состояние в вашем домене, вам следует использовать этот метод, чтобы создать исключение или показать ошибку.
if ( $ openingHours -> isAlwaysClosed ()) {
throw new RuntimeException ( ' Opening hours missing ' );
}
OpeningHours::nextOpen
OpeningHours::nextOpen(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface`
Возвращает DateTime
следующего открытия из заданного DateTime
( $dateTime
или с этого момента, если этот параметр имеет значение NULL или опущен).
Если передается объект DateTimeImmutable
, возвращается объект DateTimeImmutable
.
Установите в $searchUntil
дату, чтобы генерировать исключение, если до этого момента не удалось найти время открытия.
Установите в $cap
дату, чтобы, если до этого момента не удалось найти время открытия, возвращалась $cap
.
$ openingHours -> nextOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
OpeningHours::nextClose
OpeningHours::nextClose(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface`
Возвращает DateTime
следующего закрытия из заданного DateTime
( $dateTime
или с этого момента, если этот параметр имеет значение NULL или опущен).
Если передается объект DateTimeImmutable
, возвращается объект DateTimeImmutable
.
Установите в $searchUntil
дату, чтобы генерировать исключение, если до этого момента не удалось найти время закрытия.
Установите в $cap
дату, чтобы, если до этого момента не удалось найти время закрытия, возвращалась $cap
.
Если расписание всегда открыто или всегда закрыто, изменение состояния не происходит, и поэтому nextOpen
(а также previousOpen
, nextClose
и previousClose
) выдаст MaximumLimitExceeded
Вы можете перехватить его и отреагировать соответствующим образом, или вы можете использовать методы isAlwaysOpen
/ isAlwaysClosed
для прогнозирования. такой случай.
$ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
OpeningHours::previousOpen
OpeningHours::previousOpen(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface`
Возвращает предыдущее открытое DateTime
из заданного DateTime
( $dateTime
или с настоящего момента, если этот параметр имеет значение NULL или опущен).
Если передается объект DateTimeImmutable
, возвращается объект DateTimeImmutable
.
Установите в $searchUntil
дату, чтобы генерировать исключение, если после этого момента не удается найти время открытия.
Установите в $cap
дату, чтобы, если после этого момента не удастся найти время открытия, возвращалась $cap
.
$ openingHours -> previousOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
OpeningHours::previousClose
OpeningHours::previousClose(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface`
Возвращает DateTime
предыдущего закрытия из заданного DateTime
( $dateTime
или с настоящего момента, если этот параметр имеет значение NULL или опущен).
Если передается объект DateTimeImmutable
, возвращается объект DateTimeImmutable
.
Установите в $searchUntil
дату, чтобы генерировать исключение, если после этого момента не удалось найти время закрытия.
Установите в $cap
дату, чтобы, если после этого момента не удалось найти время закрытия, возвращалась $cap
.
$ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
OpeningHours::diffInOpenHours(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
Возвращает количество открытого времени (количество часов в виде плавающего числа) между двумя датами/временами.
$ openingHours -> diffInOpenHours ( new DateTime ( ' 2016-12-24 11:00:00 ' ), new DateTime ( ' 2016-12-24 16:34:25 ' ));
OpeningHours::diffInOpenMinutes(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
Возвращает количество открытого времени (количество минут в виде плавающего числа) между двумя датами/временами.
OpeningHours::diffInOpenSeconds(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
Возвращает количество времени открытия (количество секунд в виде плавающего числа) между двумя датами/временами.
OpeningHours::diffInClosedHours(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
Возвращает количество закрытого времени (количество часов в виде плавающего числа) между двумя датами/временами.
$ openingHours -> diffInClosedHours ( new DateTime ( ' 2016-12-24 11:00:00 ' ), new DateTime ( ' 2016-12-24 16:34:25 ' ));
OpeningHours::diffInClosedMinutes(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
Возвращает количество времени закрытия (количество минут в виде плавающего числа) между двумя датами/временами.
OpeningHours::diffInClosedSeconds(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
Возвращает количество времени закрытия (количество секунд в виде плавающего числа) между двумя датами/временами.
OpeningHours::currentOpenRange(DateTimeInterface $dateTime) : false | TimeRange
Возвращает экземпляр SpatieOpeningHoursTimeRange
текущего открытого диапазона, если предприятие открыто, и false, если предприятие закрыто.
$ range = $ openingHours -> currentOpenRange ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ range ) {
echo " It's open since " . $ range -> start (). "n" ;
echo " It will close at " . $ range -> end (). "n" ;
} else {
echo " It's closed " ;
}
Методы start()
и end()
возвращают экземпляры SpatieOpeningHoursTime
. Экземпляры Time
, созданные на основе даты, могут быть отформатированы с использованием информации о дате. Это полезно для диапазонов, выходящих за полночь:
$ period = $ openingHours -> currentOpenRange ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ period ) {
echo " It's open since " . $ period -> start ()-> format ( ' D Gh ' ). "n" ;
echo " It will close at " . $ period -> end ()-> format ( ' D Gh ' ). "n" ;
} else {
echo " It's closed " ;
}
OpeningHours::currentOpenRangeStart(DateTimeInterface $dateTime) : false | DateTime
Возвращает экземпляр DateTime
даты и времени с момента открытия предприятия, если предприятие открыто, и false, если предприятие закрыто.
Примечание. Если вы используете ночные диапазоны, датой может быть предыдущий день.
$ date = $ openingHours -> currentOpenRangeStart ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ date ) {
echo " It's open since " . $ date -> format ( ' H:i ' );
} else {
echo " It's closed " ;
}
OpeningHours::currentOpenRangeEnd(DateTimeInterface $dateTime) : false | DateTime
Возвращает экземпляр DateTime
даты и времени до тех пор, пока предприятие не будет открыто, если предприятие открыто, и false, если предприятие закрыто.
Примечание: дата может быть на следующий день, если вы используете ночные диапазоны.
$ date = $ openingHours -> currentOpenRangeEnd ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ date ) {
echo " It will close at " . $ date -> format ( ' H:i ' );
} else {
echo " It's closed " ;
}
OpeningHours::createFromStructuredData(array|string $data, $timezone = null, $outputTimezone = null): SpatieOpeningHoursOpeningHours
Статический фабричный метод для заполнения набора массивом https://schema.org/OpeningHoursSpecification или строкой JSON.
dayOfWeek
поддерживает массив названий дней (в версии Google) или массив URL-адресов дней (официальная спецификация Schema.org).
$ openingHours = OpeningHours:: createFromStructuredData ( ' [
{
"@type": "OpeningHoursSpecification",
"opens": "08:00",
"closes": "12:00",
"dayOfWeek": [
"https://schema.org/Monday",
"https://schema.org/Tuesday",
"https://schema.org/Wednesday",
"https://schema.org/Thursday",
"https://schema.org/Friday"
]
},
{
"@type": "OpeningHoursSpecification",
"opens": "14:00",
"closes": "18:00",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
]
},
{
"@type": "OpeningHoursSpecification",
"opens": "00:00",
"closes": "00:00",
"validFrom": "2023-12-25",
"validThrough": "2023-12-25"
}
] ' );
OpeningHours::asStructuredData(strinf $format = 'H:i', string|DateTimeZone $timezone) : array
Возвращает OpeningHoursSpecification в виде массива.
$ openingHours -> asStructuredData ();
$ openingHours -> asStructuredData ( ' H:i:s ' ); // Customize time format, could be 'h:i a', 'G:i', etc.
$ openingHours -> asStructuredData ( ' H:iP ' , ' -05:00 ' ); // Add a timezone
// Timezone can be numeric or string like "America/Toronto" or a DateTimeZone instance
// But be careful, the time is arbitrary applied on 1970-01-01, so it does not handle daylight
// saving time, meaning Europe/Paris is always +01:00 even in summer time.
SpatieOpeningHoursOpeningHoursForDay
Этот класс предназначен только для чтения. Он реализует ArrayAccess
, Countable
и IteratorAggregate
поэтому вы можете обрабатывать список TimeRange
аналогично массиву.
SpatieOpeningHoursTimeRange
Объект значения, описывающий период с временем начала и окончания. Может быть преобразовано в строку в формате H:iH:i
.
SpatieOpeningHoursTime
Объект значения, описывающий одно время. Может быть преобразовано в строку в формате H:i
.
Вы можете преобразовать формат OpenStreetMap в объект OpeningHours
, используя osm-opening-hours (спасибо mgrundkoetter)
Пожалуйста, посетите CHANGELOG для получения дополнительной информации о том, что изменилось за последнее время.
composer test
Пожалуйста, смотрите ВКЛАД для получения подробной информации.
Если вы обнаружили ошибку, связанную с безопасностью, отправьте электронное письмо по адресу [email protected] вместо использования системы отслеживания проблем.
Вы можете свободно использовать этот пакет, но если он попадет в вашу производственную среду, мы будем очень признательны, если вы отправите нам открытку из вашего родного города с указанием того, какой из наших пакетов вы используете.
Наш адрес: Spatie, Kruikstraat 22, 2018, Антверпен, Бельгия.
Все полученные открытки мы публикуем на сайте нашей компании.
Лицензия MIT (MIT). Дополнительную информацию см. в файле лицензии.