result(); $this->assertSame(17, $result->days); $this->assertSame(2, $result->weeks); $this->assertSame(12, $result->weekDays); } public function testCanCalculateDurationBetweenTwoDatesCloseToOverThreeWeeks(): void { $start = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-01T00:00:00+00:00'); $end = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-21T00:00:00+00:00'); $calculateDuration = new CalculateDuration($start, $end); $result = $calculateDuration->result(); $this->assertSame(21, $result->days); $this->assertSame(2, $result->weeks); $this->assertSame(15, $result->weekDays); } public function testCanCalculateDurationBetweenTwoDatesInDifferentTimezones(): void { $start = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-01T00:00:00-12:00'); $end = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-21T00:00:00+14:00'); $calculateDuration = new CalculateDuration($start, $end); $result = $calculateDuration->result(); $this->assertSame(20, $result->days); $this->assertSame(2, $result->weeks); $this->assertSame(14, $result->weekDays); } public function testCanCalculateDurationBetweenAndDisplayAsSeconds(): void { $start = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-01T00:00:00+00:00'); $end = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-8T00:00:00+00:00'); $calculateDuration = new CalculateDuration($start, $end); $result = $calculateDuration->result(DurationModifier::Second); // 8 * 60 * 60 * 24 $this->assertSame(691200, $result->days); // 5 * 60 * 60 * 24 $this->assertSame(518400, $result->weekDays); // 1 * 7 * 60 * 60 * 24 $this->assertSame(604800, $result->weeks); } public function testCanCalculateDurationBetweenAndDisplayAsMinutes(): void { $start = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-01T00:00:00+00:00'); $end = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-8T00:00:00+00:00'); $calculateDuration = new CalculateDuration($start, $end); $result = $calculateDuration->result(DurationModifier::Minute); // 8 * 60 * 24 $this->assertSame(11520, $result->days); // 5 * 60 * 24 $this->assertSame(8640, $result->weekDays); // 1 * 7 * 60 * 24 $this->assertSame(10080, $result->weeks); } public function testCanCalculateDurationBetweenAndDisplayAsHours(): void { $start = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-01T00:00:00+00:00'); $end = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-8T00:00:00+00:00'); $calculateDuration = new CalculateDuration($start, $end); $result = $calculateDuration->result(DurationModifier::Hour); // 8 * 24 $this->assertSame(192, $result->days); // 5 * 24 $this->assertSame(144, $result->weekDays); // 1 * 7 * 24 $this->assertSame(168, $result->weeks); } public function testCanCalculateDurationBetweenAndDisplayAsYears(): void { $start = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-01T00:00:00+00:00'); $end = DateTimeImmutable::createFromFormat(DateTimeInterface::ISO8601, '2024-08-8T00:00:00+00:00'); $calculateDuration = new CalculateDuration($start, $end); $result = $calculateDuration->result(DurationModifier::Year); // 8 * 0.00273973 $this->assertSame(0.02192, $result->days); // 5 * 0.00273973 $this->assertSame(0.01644, $result->weekDays); // 1 * 7 * 0.00273973 $this->assertSame(0.01918, $result->weeks); } }