sourcebox / opening-hours
检查营业时间
v1.0.0
2016-10-25 07:03 UTC
Requires (Dev)
- phpunit/phpunit: ^5.6
- squizlabs/php_codesniffer: ^2.7
This package is not auto-updated.
Last update: 2024-09-14 20:45:51 UTC
README
这是一个小的库,帮助你执行多个营业时间的检查。
要求
- PHP 7.0+
安装
你可以使用composer安装这个库,注意它仍在开发中,在第一个版本发布之前可能会发生重大变化。
composer require sourcebox/opening-hours
快速使用
你可以通过查看测试来轻松了解使用方法,但这里有一个快速示例
创建时间表
时间表包含你的营业时间,它由一组具有时间段的日期数组组成。没有时间段或不在时间表中的日期被视为闭馆日。
$timeTable = new TimeTable([ new Day(Day::MONDAY, [ new TimePeriod('08:00', '12:00'), new TimePeriod('13:00', '17:00'), ]), new Day(Day::TUESDAY, [ new TimePeriod('08:00', '12:00'), new TimePeriod('13:00', '17:00'), ]), new Day(Day::WEDNESDAY, [ new TimePeriod('08:00', '12:00'), new TimePeriod('13:00', '17:00'), ]), new Day(Day::THURSDAY, [ new TimePeriod('08:00', '12:00'), new TimePeriod('13:00', '17:00'), ]), new Day(Day::FRIDAY, [ new TimePeriod('08:00', '12:00'), new TimePeriod('13:00', '17:00'), ]), new Day(Day::SATURDAY, [ new TimePeriod('08:00', '12:00'), ]), ]); $checker = new OpeningHourChecker($timeTable);
将时间表传递给营业时间检查器,以便我们可以开始检查。
基本检查
OpeningHourChecker 包含一些基本检查。
检查某一天是否营业。
这是一个非常简单的检查,只检查给定日期是否有时间段。
$checker->isOpenOn(Day::TUESDAY); // true $checker->isClosedOn(Day::TUESDAY); // false
检查某一天和时间的营业情况
这个检查将检查给定日期和时间的时段。
$checker->isOpenAt(\DateTime::createFromFormat('Y-m-d H:i:s', '2016-10-10 10:00:00'))); // returns true $checker->isClosedAt(\DateTime::createFromFormat('Y-m-d H:i:s', '2016-10-10 10:00:00'))); // returns false
覆盖
覆盖基本上是时间表的例外。有两种类型的覆盖,包括和排除。包括覆盖是包含的日期,排除覆盖是排除的日期。
目前包含两个覆盖类。
示例
此示例将圣诞节日期作为排除覆盖添加,这意味着圣诞节不包含在时间表中。当你想在特定日期关闭商店时,这很有用。
$dateOverride = new DateOverride($christmasDateTime); $dateOverride->setType(OverrideInterface::TYPE_EXCLUDE); $openingHourChecker->addOverride($dateOverride); $openingHourChecker->isOpenAt($christmasDateTime); // return false
反之亦然,比如你想在黑色星期五全天开放,不管营业时间如何。你可以使用相同的 DateOverride
,但将类型设置为 TYPE_INCLUDE
。注意覆盖优先考虑排除而非包括。
还有一个 DatePeriodOverride,它像 DateOverride 一样,但适用于时间段。
$holidayPeriodStart = \DateTime::createFromFormat('Y-m-d H:i:s', '2017-01-01 00:00:00', $timezone); $holidayPeriodEnd = \DateTime::createFromFormat('Y-m-d H:i:s', '2017-01-10 00:00:00', $timezone); $holidayPeriod = new DatePeriodOverride($holidayPeriodStart, $holidayPeriodEnd); $holidayPeriod->setType(OverrideInterface::TYPE_EXCLUDE); $openingHourChecker->addOverride($holidayPeriod);
在这个示例中,商店从 $holidayPeriodStart
关闭到 $holidayPeriodEnd
。