danoha / date-range

轻松处理日期范围。

v1.1.0 2017-06-08 06:43 UTC

This package is not auto-updated.

Last update: 2024-09-29 03:15:28 UTC


README

轻松处理日期范围。

安装

与composer配合使用最佳。👌

composer require danoha/date-range

如果您不使用composer或其自动加载,请require src/DateRange.phpsrc/DateRangeCollection.php

然后在您的代码中直接使用 \Danoha\DateRange\Danoha\DateRangeCollection 类。

用法

处理日期范围

$range = new \Danoha\DateRange($from, $to); // any parameter can be NULL
$range
    ->join($thatRange)
    ->intersect([ $from, $to ]) // methods accepting range also accept array
    ->contains($currentDate);

处理日期范围集合

$coll = new \Danoha\DateRangeCollection([
    [ $from, $to ], // two items per range accepted
    [ 'from' => $from, 'to' => $to, ], // accepted too
    
    [ $from, NULL, ], // NULL means indefinite interval
    [ NULL, NULL, ], // and can be used on both sides
]);

$coll
    ->join($thatCollection)
    ->intersect([ $range1, $range2 ]) // methods accepting collection also accept array
    ->contains($someRange);

获取您的范围

$coll->getRanges() === [
    new \Danoha\DateRange($from, $to),
    new \Danoha\DateRange($from, NULL),
];

$coll->unwrap() === [
    [ 'from' => $from, 'to' => $to, ], // every range has this exact format
    [ 'from' => $from, 'to' => NULL, ], // regardless of what was passed to constructor
    ...
];

接受集合的每个方法也接受范围数组(也可以是数组)

$coll->intersect(
    // another collection
    new \Danoha\DateRangeCollection([ ... ])
);

$coll->intersect([
    // inlined collection (same as constructor)
    [ 'from' => $from, 'to' => $to, ]
]);

注意:确定的区间在两端都处理为包含。

可用的范围方法

注意:所有返回范围的方法都返回新实例。这意味着在相同的范围上调用 $range->join(...) 两次将创建两个实例,且它们都不包含两个连接的范围。

  • getFrom - 返回范围中的第一个日期,
  • getTo - 返回范围中的最后一个日期,
  • unwrap - 获取数组格式的范围,
  • intersect - 找出当前范围和给定范围的交集,
  • overlaps - 测试当前范围和给定范围是否重叠,
  • join - 找出当前范围和给定范围的共同范围,
  • isRightAfter - 测试当前范围是否紧跟在给定范围之后,
  • isRightBefore - 测试当前范围是否紧跟在给定范围之前,
  • subtract - 返回当前范围和给定范围之间的差异集合,
  • includes - 测试范围是否包含给定的日期或范围,
  • includesDate - 测试范围是否包含给定的日期,
  • includesRange - 测试范围是否包含给定的范围,
  • equals - 测试当前范围是否等于给定范围。

可用的集合方法

注意:所有返回集合的方法都返回新实例。这意味着在相同的集合上调用 $coll->add(...) 两次将创建两个实例,且它们都不包含添加的范围。

  • getRanges - 获取当前集合中的范围,
  • unwrap - 以数组格式获取底层数日期范围,
  • add - 将给定的范围添加到集合中,
  • includes - 测试集合是否包含给定的日期或范围,
  • join - 将给定的范围添加到当前集合中,并在可能的情况下连接当前集合中的范围,
  • intersect - 计算与给定范围的全部交集,
  • subtract - 从当前集合中减去给定的范围。