ekinhbayar / interval-parser
区间解析器。仍在开发中。
0.1.2
2017-04-01 01:24 UTC
Requires
- php: ^7
This package is auto-updated.
Last update: 2024-09-15 00:12:35 UTC
README
这是一个正在进行中的作品。
这个库提供了三个类
IntervalFinder
,寻找时间区间和任何前导/尾随数据,并以一个TimeInterval
对象的形式返回。
IntervalFinder::find(string $input, int $flags) : TimeInterval
Parser
,接收一个字符串,并通过以下3#方法将其转换为DateInterval。
Parser::parse(string $input): \DateInterval
Normalizer
,寻找并替换与非strtotime兼容的缩写,以兼容的缩写替换。它不接受前导数据,但会返回尾随数据并保留已兼容的缩写。
Normalizer::normalize(string $input): string
IntervalFinder::find
方法允许的标志
class IntervalFlags
{
const INTERVAL_ONLY = 0b00000000;
const REQUIRE_TRAILING = 0b00000001;
const REQUIRE_LEADING = 0b00000010;
const MULTIPLE_INTERVALS = 0b00000100;
}
IntervalFinder
接收一个ParserSettings
对象,允许您设置要使用的分隔符,默认为
string $leadingSeparationString = 'in',
bool $keepLeadingSeparator = false,
int $multipleSeparationType = self::SYMBOL,
string $multipleSeparationSymbol = ',',
string $multipleSeparationWord = 'foo'
TimeInterval
是一个值对象,表示一段时间区间。它基本上是一个包含额外信息的DateInterval。
int $intervalOffset
int $intervalLength
DateInterval $interval
string $leadingData
string $trailingData
安装
$ composer require ekinhbayar/interval-parser
基本用法
/** * Some other example inputs: * * foo in 7 weeks 8 days * 9 months 8 weeks 7 days 6 hours 5 minutes 2 seconds baz * remind me I have 10 minutes in 2 hours please * */ $trailing = '7mon6w5d4h3m2s bazinga!'; $leading = 'foo in 9w8d7h6m5s'; $both = 'foo in 9d8h5m bar'; $onlyInterval = '9 mon 2 w 3 m 4 d'; # Set ParserSettings for IntervalFinder $settings = new ParserSettings("in", false); $intervalFinder = new IntervalFinder($settings, new Normalizer()); $intervalAndTrailing = $intervalFinder->find($trailing, IntervalFlags::REQUIRE_TRAILING); var_dump($intervalAndTrailing); $intervalAndLeading = $intervalFinder->find($leading, IntervalFlags::REQUIRE_LEADING); var_dump($intervalAndLeading); $intervalWithBoth = $intervalFinder->find($both, IntervalFlags::REQUIRE_TRAILING | IntervalFlags::REQUIRE_LEADING); var_dump($timeIntervalWithBoth); $intervalParser = new Parser(new Normalizer()); $dateInterval = $intervalParser->parse($onlyInterval); var_dump($dateInterval); # Multiple Intervals # 1. Comma Separated $multiple = 'foo in 9d8h5m bar , baz in 5 minutes, foo in 2 days 4 minutes boo, in 1 hr, 10 days'; $multipleIntervals = $intervalFinder->find($multiple, IntervalFlags::MULTIPLE_INTERVALS); var_dump($multipleIntervals); # 2. Separated by a defined-on-settings word $settings = new ParserSettings("in", 1, ',', 'then'); $intervalFinder = new IntervalFinder($settings); $wordSeparated = 'foo in 9d8h5m bar then baz in 5 minutes then foo in 2 days 4 minutes boo then in 1 hr then 10 days'; $wordSeparatedIntervals = $intervalFinder->find($wordSeparated, IntervalFlags::MULTIPLE_INTERVALS); var_dump($wordSeparatedIntervals);
非常感谢 PeeHaa、DaveRandom、bwoebi 和 pcrov,感谢他们让我学到的一切,以及他们所有的帮助!:-)