sourcebox/opening-hours

检查营业时间

v1.0.0 2016-10-25 07:03 UTC

This package is not auto-updated.

Last update: 2024-09-14 20:45:51 UTC


README

Software License Build Status SensioLabs Insight StyleCI Coverage Status

这是一个小的库,帮助你执行多个营业时间的检查。

要求

  • 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