cog/chrono-shifter

PHP 时间迭代器,用于在时间中移动

2.3 2019-02-26 16:12 UTC

This package is not auto-updated.

Last update: 2021-11-30 19:08:58 UTC


README

Build Status Code Coverage Scrutinizer Code Quality

ChronoShifter

使用公历在时间中导航的 PHP 框架。

内容

Shifters

Shifters 转换时间。

use COG\ChronoShifter\Direction\Increasing;
use COG\ChronoShifter\Period\Month;
use COG\ChronoShifter\Selector\Specific;
use COG\ChronoShifter\Shifter\ChronoShifter;

$shifter = new ChronoShifter(new Month('2015-01-05'), new Specific(new Increasing(), 5));
$shifter->next('2015-01-05'); // '2015-02-05'

Shifters 被设计成可组合和可扩展的。它们可以使用的组合数量很高,并且创建新的 shifters、方向、周期和选择器相对简单。

有更多 shifters 可用于组合或修改结果。

Periods

Periods 封装了在周期之间遍历的逻辑。Periods 常用于回答诸如“这个月的第一天星期几?”等问题。

use COG\ChronoShifter\Period\Month;

$month = new Month('2015-01-12');
$month->getStartDate(); // '2015-12-01'
$month->getEndDate(); // '2015-12-31'
$month->next();
$month->getStartDate(); // '2015-01-01'
$month->getEndDate(); // '2015-01-31'

IsoChronic period 表示时间段的等分。

use COG\ChronoShifter\Period\IsoChronic;

$iso = new IsoChronic('2015-01-11', '2015-01-11', 7);
$iso->getStartDate(); // '2015-01-11'
$iso->getEndDate(); // '2015-01-17'
$iso->next();
$iso->getStartDate(); // '2015-01-18'
$iso->getEndDate(); // '2015-01-24'

Evaluators

Evaluators 封装了有关日期的事实。

use COG\ChronoShifter\Evaluator\DayOfWeek;

$evaluator = new DayOfWeek(DayOfWeek::MONDAY);
$evaluator->is('2015-01-24'); // False

有 5 个用于日期基本事实的评估器,以及 AND/OR/NOT 逻辑评估器以支持以任何必要的方式组合评估器。

  • DayOfWeek($dayOfWeek : int)
  • Holiday($holidayProvider : HolidayProvider);
  • Weekday();
  • Weekend();
  • Workday($holidayProvider : HolidayProvider);
  • LogicalAnd($first : Evaluator, $second : Evaluator);
  • LogicalOr($first : Evaluator, $second : Evaluator);
  • LogicalNot($evaluator : Evaluator);

Selectors

Selectors 使用周期、方向和评估器来找到匹配项。

  • FirstOf($direction : Direction, $evaluator : Evaluator);
  • LastOf($direction : Direction, $evaluator : Evaluator);
  • Specific($direction : Direction, $number : int);

Directions

Directions 指定了如何在周期之间遍历。ChronoShifter 提供了两种方向:递增到未来或递减到过去。

  • Increasing();
  • Decreasing();

HolidayProvider

有许多方式可以表示假日,ChronoShifter 提供了一个接口,因此您可以将应用程序的假日逻辑插入其中。

use COG\ChronoShifter\HolidayProvider\ArrayHolidayProvider;

$holidayProvider = new ArrayHolidayProvider(array('2015-01-01'));
$holidayProvider->isHoliday('2014-12-31'); // False
$holidayProvider->isHoliday('2015-01-01'); // True

Examples