Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

DateTimeComparator.php

Namespace

SebastianBergmann\Comparator

File

vendor/sebastian/comparator/src/DateTimeComparator.php

View source
<?php

declare (strict_types=1);

/*
 * This file is part of sebastian/comparator.
 *
 * (c) Sebastian Bergmann <sebastian@phpunit.de>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace SebastianBergmann\Comparator;

use function abs;
use function assert;
use function floor;
use function sprintf;
use DateInterval;
use DateTimeInterface;
use DateTimeZone;
final class DateTimeComparator extends ObjectComparator {
    public function accepts(mixed $expected, mixed $actual) : bool {
        return $expected instanceof DateTimeInterface && $actual instanceof DateTimeInterface;
    }
    
    /**
     * @throws ComparisonFailure
     */
    public function assertEquals(mixed $expected, mixed $actual, float $delta = 0.0, bool $canonicalize = false, bool $ignoreCase = false, array &$processed = []) : void {
        assert($expected instanceof DateTimeInterface);
        assert($actual instanceof DateTimeInterface);
        $absDelta = abs($delta);
        $delta = new DateInterval(sprintf('PT%dS', $absDelta));
        $delta->f = $absDelta - floor($absDelta);
        $actualClone = (clone $actual)->setTimezone(new DateTimeZone('UTC'));
        $expectedLower = (clone $expected)->setTimezone(new DateTimeZone('UTC'))
            ->sub($delta);
        $expectedUpper = (clone $expected)->setTimezone(new DateTimeZone('UTC'))
            ->add($delta);
        if ($actualClone < $expectedLower || $actualClone > $expectedUpper) {
            throw new ComparisonFailure($expected, $actual, $this->dateTimeToString($expected), $this->dateTimeToString($actual), 'Failed asserting that two DateTime objects are equal.');
        }
    }
    
    /**
     * Returns an ISO 8601 formatted string representation of a datetime or
     * 'Invalid DateTimeInterface object' if the provided DateTimeInterface was not properly
     * initialized.
     */
    private function dateTimeToString(DateTimeInterface $datetime) : string {
        $string = $datetime->format('Y-m-d\\TH:i:s.uO');
        return $string ?: 'Invalid DateTimeInterface object';
    }

}

Classes

Title Deprecated Summary
DateTimeComparator

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal