wapmorgan / time-parser
自然语言编写的日期和时间解析器
2.0.0
2017-04-27 16:14 UTC
Requires
- php: >=5.6.0
Requires (Dev)
- phpunit/phpunit: ~4.8
This package is auto-updated.
Last update: 2024-08-28 06:52:31 UTC
README
PHP的用于自然语言编写的日期和时间的解析器。
- 安装
- 用法
- 支持的语言
- 待办事项
安装
安装包的首选方式是通过composer
composer require wapmorgan/time-parser
用法
解析用户的一些输入并接收一个DateTime
对象。
-
创建一个解析器对象
$parser = new wapmorgan\TimeParser\TimeParser('all');
第一个参数是一个语言。适用值
'all'
(默认)- 扫描所有可用语言。当无法预测用户首选语言时使用。'russian'
- 只扫描一种语言的字符串。array('english', 'russian')
- 先按英语扫描,然后按俄语扫描。
-
启用和禁用解析字母值。
// To enable alphabetic parsing. $parser->allowAlphabeticUnits(); // To disable alphabetic parsing. $parser->disallowAlphabeticUnits();
-
解析字符串并返回一个
DateTimeImmutable
对象。如果第二个参数是true
,则方法在未找到日期和时间字符串时将返回false
。如果提供了第三个参数,则它将填充所有变换后获得的字符串。$datetime = $parser->parse(fgets(STDIN)); // next call returns false $datetime = $parser->parse('abc', true); // $result will contains "we will come " $datetime = $parser->parse('We will come in a week', true, $result);
-
对于高级解析字母值,使用了内置函数。您可以为此功能指定自己的处理器。目前只用于俄语和英语语言。
use wapmorgan\TimeParser\TimeParser; // $string will contains alphabetic value for advanced parsing. // Ex.: for string "in twenty five minutes", it will contains "twenty five". // $lang will contains name of the parsed language. TimeParser::setWordsToNumberCallback(function($string, $lang) { // do some magic });
-
您可以添加自己的自定义语言。
// $date must be an array with a structure like the existing rules. $parser->addLanguage($data);
支持的语言
目前支持四种语言:俄语、英语、法语和德语。正在开发两种语言支持:中文、西班牙语。它们的规则在rules
目录中,因此您可以通过添加新语言或改进现有语言来改进TimeParser。
包含日期和时间的字符串示例
出于开发原因,您可能想查看解析过程。为此,调用相关方法
TimeParser::enableDebug(); // and TimeParser::disableDebug();
可解析的子串
为了理解它是如何工作的,请单独查看子串
- 1977年12月15日 - 绝对日期
- 15:12:13 - 绝对时间
- 下个星期一 或 这个星期五 - 绝对日期
- 下一年 或 2016年 - 绝对日期
- 二月份 或 下一个月 - 绝对日期
- 下周 - 绝对日期
- 15小时后 - 相对时间
- 10分钟后 - 相对时间
- 11秒后 - 相对时间
- 两周后 - 相对日期
- 一天后 - 相对日期
- 十个月后 - 相对日期
- 一个小时后 - 相对日期(仅限俄语和英语)
- 一小时后 - 相对日期(仅限俄语和英语)
- 二十五分钟后 - 相对日期(仅限俄语和英语)
- 二十五分钟后 - 相对日期(仅限俄语和英语)
- 五分钟前 - 相对日期(仅限俄语和英语)
- 五分钟前 - 相对日期(仅限俄语和英语)
- 五分钟后 - 相对日期(仅限俄语和英语)
- 五分钟后 - 相对日期(仅限俄语和英语)
- 昨天 - 相对日期(仅限俄语和英语)
- 昨天 - 相对日期(仅限俄语和英语)
待办事项
- 测试。
- 尝试解析组合: 5小时2分钟。
- 尝试解析字母偏移: 五小时 和 五小时后。
语言待办事项
- 中文 - 检查汉字。
- 西班牙语 - 检查介词。
- 葡萄牙语
- 阿拉伯语
- 韩语