ruslanovich111/date-converter

本包最新版本(1.1.1)没有提供许可证信息。

转换日期

1.1.1 2022-11-08 06:05 UTC

This package is not auto-updated.

Last update: 2024-09-24 15:07:03 UTC


README

该库为处理日期提供了扩展功能。

  • 将日期行 "The 13th of Mar. 1999", "Mar. 2022" 转换为对象。
  • 将不同语言中的日期行 "8 März 2023" 转换。
  • 将日期区间 "13th of Mar. 1999 - 8 März 2023" 转换。
  • 将日期序列 "The 12th of April 2022; 8 März 2023" 转换。
  • 在您的语言文本中搜索日期...

该库解决了所有这些问题。

版本

  • 主分支(标签 1.0.*)中有 php8.1 的代码。
  • 主分支 php8.0(标签 1.1.*)中有 php8.0 的代码。

配置

创建 ArrayPatternStorage
该对象接受严格定义格式的配置数组

  • patterns 字段应包含日期的正则表达式。
  • months 字段应包含月份的正则表达式。应有正好12个。
<?php

$patternStorage = new ArrayPatternStorage([
    'patterns' => [
        '($day)th ($month) ($year)',
        'The ($day)th of ($month) ($year)',
    ],
    'months' => [
        1 => ["January", "Jan\."],
        2 => ["February", "Febr\."],
        3 => ["March", "Mar\."],
        4 => ["April"],
        5 => ["May"],
        6 => ["June"],
        7 => ["July"],
        8 => ["August"],
        9 => ["September"],
        10 => ["October"],
        11 => ["November"],
        12 => ["December"]
    ],
]);

该库自动替换正则表达式:$day = [0-9]{1,2}$year = [0-9]{4}$month = January|Jan\.|February|...

转换

所有使用该库的示例都在 examples 文件夹中。
例如,在 ./examples/simple_date/test.php 中描述了简单的转换

/** $patternStorage defined above */
$patternStorage = ...

$converter = new RowToModelConverter($patternStorage);
$converter->convertToDate("12th February 2022");

convertToDate 方法将返回一个 DateModel 对象,因为字符串 "12th February 2022" 与配置文件中的第一个模式匹配。
如果您传递一个不匹配任何模式的字符串,则将抛出异常。
配置中模式的顺序很重要,因为 convertToDate 方法根据第一个匹配的模式返回一个 DateModel 对象!

高级选项

区间转换:interval-convertation
序列转换:secuence-convertation
多个模式存储:multiple-storages

搜索

该库提供了两种搜索策略

  • 替换搜索
  • 重复搜索

使用搜索的示例在 examples/search 文件夹中描述。接下来,我们将解释它们的区别。
给定输入行
2022年4月12日、4月13日和2021年4月17日天气晴朗

替换搜索

  • 找到与输入对应的第一个模式的所有日期,替换为 $pattern_1,保存转换后的行
    天气晴朗在外 $pattern_1、4月13日和 $pattern_1.
    模式1的日期存储在 TextAllPatternMatches 模型中。
  • 在转换后的行(用 $pattern_1)中找到模式2的日期,替换为 $pattern_2,保存转换后的行
    天气晴朗在外 $pattern_1、$pattern_2 和 $pattern_1.
    模式2的日期存储在 TextAllPatternMatches 模型中。
  • 等等...

对于此策略,配置中模式的顺序很重要!

重复搜索

  • 找到与输入对应的第一个模式的所有日期,替换为 $pattern_1,保存转换后的行
    天气晴朗在外 $pattern_1、4月13日和 $pattern_1.
    模式1的日期存储在TextPattern模型中。
  • 再次,我们取输入行,找到与模式2对应的日期,将其替换为$pattern_2,保存字符串
    2022年4月12日那天天气晴朗,$pattern_2和2021年4月17日,
    模式2的日期存储在TextPattern模型中。
  • 等等...

因此,TextPatternSequence被填充了TextPattern模型。在这个策略中,顺序不重要。

高级选项

区间搜索: interval-search