wapmorgan/time-parser

自然语言编写的日期和时间解析器

2.0.0 2017-04-27 16:14 UTC

This package is auto-updated.

Last update: 2024-08-28 06:52:31 UTC


README

PHP的用于自然语言编写的日期和时间的解析器。

Composer package Latest Stable Version Total Downloads Latest Unstable Version License Testing

  1. 安装
  2. 用法
  3. 支持的语言
  4. 待办事项

安装

安装包的首选方式是通过composer

composer require wapmorgan/time-parser

用法

解析用户的一些输入并接收一个DateTime对象。

  1. 创建一个解析器对象

    $parser = new wapmorgan\TimeParser\TimeParser('all');

    第一个参数是一个语言。适用值

    • 'all'(默认)- 扫描所有可用语言。当无法预测用户首选语言时使用。
    • 'russian' - 只扫描一种语言的字符串。
    • array('english', 'russian') - 先按英语扫描,然后按俄语扫描。
  2. 启用和禁用解析字母值。

    // To enable alphabetic parsing.
    $parser->allowAlphabeticUnits();
    // To disable alphabetic parsing.
    $parser->disallowAlphabeticUnits();
  3. 解析字符串并返回一个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);
  4. 对于高级解析字母值,使用了内置函数。您可以为此功能指定自己的处理器。目前只用于俄语和英语语言。

    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
    });
    
  5. 您可以添加自己的自定义语言。

    // $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分钟
  • 尝试解析字母偏移: 五小时五小时后

语言待办事项

  • 中文 - 检查汉字。
  • 西班牙语 - 检查介词。
  • 葡萄牙语
  • 阿拉伯语
  • 韩语