Skip to content

LocalDateInterval doesn't handle infinite properly #7

@maidmaid

Description

@maidmaid

Actual result :

-/-                   in -/-                   ? no
2000-01-01/-          in -/-                   ? no
-/2000-12-31          in -/-                   ? no
2000-01-01/2000-12-31 in -/-                   ? (error) The interval "-/-" does not have a finite end.
2000-06-01/-          in -/-                   ? no
-/2000-06-01          in -/-                   ? no
2000-06-01/2000-06-01 in -/-                   ? (error) The interval "-/-" does not have a finite end.
-/-                   in 2000-01-01/-          ? no
2000-01-01/-          in 2000-01-01/-          ? no
-/2000-12-31          in 2000-01-01/-          ? no
2000-01-01/2000-12-31 in 2000-01-01/-          ? yes
2000-06-01/-          in 2000-01-01/-          ? no
-/2000-06-01          in 2000-01-01/-          ? no
2000-06-01/2000-06-01 in 2000-01-01/-          ? yes
-/-                   in -/2000-12-31          ? no
2000-01-01/-          in -/2000-12-31          ? no
-/2000-12-31          in -/2000-12-31          ? no
2000-01-01/2000-12-31 in -/2000-12-31          ? yes
2000-06-01/-          in -/2000-12-31          ? no
-/2000-06-01          in -/2000-12-31          ? no
2000-06-01/2000-06-01 in -/2000-12-31          ? yes
-/-                   in 2000-01-01/2000-12-31 ? no
2000-01-01/-          in 2000-01-01/2000-12-31 ? no
-/2000-12-31          in 2000-01-01/2000-12-31 ? no
2000-06-01/-          in 2000-01-01/2000-12-31 ? no
-/2000-06-01          in 2000-01-01/2000-12-31 ? no
-/-                   in 2000-06-01/-          ? no
2000-01-01/-          in 2000-06-01/-          ? no
-/2000-12-31          in 2000-06-01/-          ? no
2000-01-01/2000-12-31 in 2000-06-01/-          ? no
2000-06-01/-          in 2000-06-01/-          ? no
-/2000-06-01          in 2000-06-01/-          ? no
2000-06-01/2000-06-01 in 2000-06-01/-          ? yes
-/-                   in -/2000-06-01          ? no
2000-01-01/-          in -/2000-06-01          ? no
-/2000-12-31          in -/2000-06-01          ? no
2000-01-01/2000-12-31 in -/2000-06-01          ? no
2000-06-01/-          in -/2000-06-01          ? no
-/2000-06-01          in -/2000-06-01          ? no
2000-06-01/2000-06-01 in -/2000-06-01          ? yes
-/-                   in 2000-06-01/2000-06-01 ? no
2000-01-01/-          in 2000-06-01/2000-06-01 ? no
-/2000-12-31          in 2000-06-01/2000-06-01 ? no
2000-06-01/-          in 2000-06-01/2000-06-01 ? no
-/2000-06-01          in 2000-06-01/2000-06-01 ? no
script to reproduce the output above
/** @var LocalDateInterval[] $datesRanges */
$datesRanges = [
    LocalDateInterval::forever(),
    LocalDateInterval::parse('2000-01-01/-'),
    LocalDateInterval::parse('-/2000-12-31'),
    LocalDateInterval::parse('2000-01-01/2000-12-31'),
    LocalDateInterval::parse('2000-06-01/-'),
    LocalDateInterval::parse('-/2000-06-01'),
    LocalDateInterval::parse('2000-06-01/2000-06-01'),
];

foreach ($datesRanges as $a) {
    foreach ($datesRanges as $b) {
        if ($a->isFinite() && $b->isFinite()) {
            continue;
        }
        try {
            $result = $a->containsInterval($b) ? 'yes' : 'no';
        } catch (Throwable $e) {
            $result = '(error) '.$e->getMessage();
        }
        echo sprintf('%-21s in %-21s ? %s%s', $b, $a, $result, PHP_EOL);
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions