PHP 库,用于解析、表示和操作遵循扩展日期/时间格式规范的日期。

资助包维护!
JeroenDeDauw

安装: 253 117

依赖项: 4

建议者: 0

安全性: 0

星标: 10

关注者: 11

分支: 7

开放问题: 15

3.0.1 2024-05-03 13:30 UTC

This package is auto-updated.

Last update: 2024-09-19 12:11:01 UTC


README

GitHub Workflow Status Type Coverage codecov Latest Stable Version Download count License

EDTF PHP 是一个小型库,用于解析、表示和处理 扩展日期/时间格式 规范。

EDTF PHP 由 Professional.Wiki 创建并维护。初始开发由卢森堡文化部资助。这是一个开源项目,欢迎贡献!

使用方法

解析

$parser = \EDTF\EdtfFactory::newParser();
$parsingResult = $parser->parse('1985-04-12T23:20:30');
$parsingResult->isValid(); // true
$parsingResult->getEdtfValue(); // \EDTF\EdtfValue
$parsingResult->getInput(); // '1985-04-12T23:20:30'

验证

$validator = \EDTF\EdtfFactory::newValidator();
$validator->isValidEdtf('1985-04-12T23:20:30'); // true

人性化

$humanizer = \EDTF\EdtfFactory::newHumanizerForLanguage( 'en' );
$humanizer->humanize($edtfValue); // string

对象模型

$edtfValue->getMax(); // int
$edtfValue->getMin(); // int
$edtfValue->covers(\EDTF\EdtfValue $anotherValue); // bool
$edtfDate->getYear(); // int
$edtfDate->isOpenInterval(); // bool
$edtfDate->getQualification(); // \EDTF\Qualification

EDTF 支持和限制

所有级别 0、1 和 2 的 EDTF 格式都可以解析和表示,除了以下情况:

  • 带有日期的开放范围(级别 2:资格):..2004-06-01/2004-06-20(此为支持:../2004-06-20

人性化有更多限制

  • 有效数字(EDTF 级别 2):1950S2(1900 年至 1999 年之间的某个年份,估计为 1950 年)
  • 分组资格(EDTF 级别 2):2004-06~-11(年份和月份大致相同)
  • 单个组件的资格(EDTF 级别 2):?2004-06-~11(年份不确定;月份已知;日期大致相同)
  • 级别 2 未指定数字:1XXX-1X(1000 年代期间的 10 月、11 月或 12 月)

安装

要在项目中使用 EDTF 库,只需将 professional-wiki/edtf 依赖项添加到项目的 composer.json 文件中。以下是一个仅定义对 EDTF 1.x 依赖项的最小 composer.json 文件示例

{
    "require": {
        "professional-wiki/edtf": "~1.0"
    }
}

开发

首先通过执行以下命令安装项目依赖项

composer update

您可以通过执行以下命令运行测试

make test

您可以通过执行以下命令运行样式检查和静态分析

make cs

要运行所有 CI 检查,请执行

make

您还可以直接调用 PHPUnit 并传递参数,如下所示

vendor/bin/phpunit --filter SomeClassNameOrFilter

发布说明

版本 3.0.1 - 2024-05-03

  • 修复了在组合近似资格时的“未定义数组键”警告
  • 改进了翻译

版本 3.0.0 - 2023-01-18

功能更改

  • 改进了不确定和近似日期的人性化
  • 改进了人性化中的大写,尤其是法语
  • 来自 TranslateWiki 的各种翻译更新,提高了许多语言的人性化
  • 增加了人性化中的复数化支持,供 TranslateWiki 使用

破坏性 API 变更

  • 删除了 ExtDate::uncertain 的参数
  • 删除了 ExtDate::approximate 的参数
  • FrenchStrategy 重命名为 DefaultStrategy
  • 使 Qualification 构造函数参数为必需

进一步 API 变更

  • 弃用 ExtDate::uncertain,改用 ExtDate::isUncertain
  • 弃用 ExtDate::approximate,改用 ExtDate::isApproximate
  • 添加了 Qualification::newFullyKnown
  • 添加了 Qualification::isFullyKnown
  • 添加了 Qualification::dayIsKnown
  • 添加了 Qualification::monthIsKnown
  • 添加了 Qualification::yearIsKnown
  • 添加了 Qualification::isUncertain,替换了 Qualification::uncertain
  • 添加了 Qualification::dayIsUncertain
  • 添加了 Qualification::monthIsUncertain
  • 添加了 Qualification::yearIsUncertain
  • 添加了 Qualification::isApproximate,替换了 Qualification::approximate
  • 添加了 Qualification::dayIsApproximate
  • 添加了 Qualification::monthIsApproximate
  • 添加了 Qualification::yearIsApproximate
  • 添加了 Qualification::isUniform
  • 添加了 Qualification::monthAndYearHaveTheSameQualification
  • 添加了 ExtDate::isUniformlyQualified

版本 2.0.2 - 2022-04-29

  • 改进了翻译

版本 2.0.1 - 2022-02-19

  • ? 将不再被识别为有效日期

版本 2.0.0 - 2021-04-28

  • 修复了对于像 1000-01-01..2000-12-30 这样具有大范围元素的集合的性能问题
  • 修复了包含至少一个开放范围的多个元素的集合的格式化问题
  • 改进了像 2000..2010 这样的范围元素的格式化
  • 现在拒绝结束日期早于开始日期的区间和集合范围
  • Set 类进行了各种破坏性更改
    • 构造函数签名已更改
    • 移除了 hasOpenStarthasOpenEnd
    • 移除了 isSingleElement
  • 添加了 Set::isEmpty
  • 添加了 Set::getElements
  • 添加了具有实现的 SetElement 接口
    • OpenSetElement
    • RangeSetElement
    • SingleDateSetElement
  • ExtDate::precisionSeason::precision 现在将保证返回一个整数
  • ExtDateSeason 中的 precisionAsString 现在将保证返回一个非空字符串

版本 1.3.0 - 2021-04-26

  • 修复了区间中的季节支持
  • 修复了解析带有额外空格的开放集合,如 { ..2021}(感谢 @chaudbak)
  • 添加了 ExtDate::iso8601ExtDateTime::iso8601(感谢 @seth-shaw-unlv)
  • 添加了 ParsingResult::getErrorMessage

版本 1.2.0 - 2021-04-16

  • 改进了开放集合的格式化

版本 1.1.0 - 2021-03-20

  • 将国际化添加到 StructuredHumanizer 服务中
  • 修复了处理 "公元0年" 的问题

版本 1.0.0 - 2021-03-19

  • 首次发布,具有以下功能
    • 支持EDTF级别0、1和2
    • 解析
    • 对象模型
    • 国际化格式化
    • 验证服务
    • 示例数据