engelsystem/src/Helpers/DayOfEvent.php

53 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace Engelsystem\Helpers;
use Engelsystem\Helpers\Carbon;
class DayOfEvent
{
/**
* @return The current day of the event.
* If "event_has_day0" is set to true in config,
* the first day of the event will be 0, else 1.
* Returns null if "event_start" is not set.
*/
public static function get(): int | null
{
$startOfEvent = config('event_start');
if (!$startOfEvent) {
return null;
}
/** @var Carbon $startOfEvent */
$startOfEvent = $startOfEvent->copy()->startOfDay();
$now = Carbon::now()->startOfDay();
$diff = $startOfEvent->diffInDays($now, false);
if ($diff >= 0) {
// The first day of the event (diff 0) should be 1.
// The seconds day of the event (diff 1) should be 2.
// Add one day to the diff.
return $diff + 1;
}
if (config('event_has_day0') && $diff < 0) {
// One day before the event (-1 diff) should day 0.
// Two days before the event (-2 diff) should be -1.
// Add one day to the diff.
return $diff + 1;
}
// This is the remaining case where the diff is negative (before event).
// One day before the event (-1 diff) should be day -1.
// Two days before the event (-2 diff) should be day -2.
// Return as it is.
return $diff;
}
}