diff --git a/app/Console/Commands/GetAircraftInfoForArrivedFlights.php b/app/Console/Commands/GetAircraftInfoForArrivedFlights.php index 1f6a390..7062f3b 100644 --- a/app/Console/Commands/GetAircraftInfoForArrivedFlights.php +++ b/app/Console/Commands/GetAircraftInfoForArrivedFlights.php @@ -144,8 +144,8 @@ class GetAircraftInfoForArrivedFlights extends Command $data->aircraft_registration, $updates['aircraft_registration'] ?? null, ), - $this->describeDate('Departure', $originalDeparture, $data->estimated_departure_utc, $updates['departure_date'] ?? null), - $this->describeDate('Arrival', $originalArrival, $data->estimated_arrival_utc, $updates['arrival_date'] ?? null), + $this->describeDate('Departure', $originalDeparture, $data->estimated_departure_utc, $updates['departure_date'] ?? null, $flight->departureAirport->timezone), + $this->describeDate('Arrival', $originalArrival, $data->estimated_arrival_utc, $updates['arrival_date'] ?? null, $flight->arrivalAirport->timezone), $this->describeAircraftType($originalAircraft, $newAircraft, $data->equipment_iata, $aircraftNotFound), ]; @@ -179,23 +179,37 @@ class GetAircraftInfoForArrivedFlights extends Command return "{$label}: {$fromLabel} → {$apiValue}"; } - protected function describeDate(string $label, ?CarbonInterface $from, ?CarbonInterface $apiValue, mixed $applied): string + protected function describeDate(string $label, ?CarbonInterface $from, ?CarbonInterface $apiValue, mixed $applied, string $timezone): string { - $fromLabel = $from?->format('j M Y H:i') . ' ' . ($from?->tzName ?? '') ?: 'Unknown'; + $toLocal = $apiValue?->copy()->setTimezone($timezone); + $fromLocal = $from?->copy()->setTimezone($timezone); - if (!$apiValue) { + if (!$toLocal) { + $fromLabel = $fromLocal ? $this->formatFlightTime($fromLocal) : 'Unknown'; return "{$label}: {$fromLabel} (not returned by API — no change)"; } - $toLabel = $apiValue->format('j M Y H:i') . ' ' . $apiValue->tzName; - if (!$applied) { - return "{$label}: {$toLabel} (no change)"; + return "{$label}: " . $this->formatFlightTime($toLocal) . " (no change)"; } + // Only bother showing the date if it actually changed (e.g. delayed past midnight). + $showDate = !$fromLocal || !$fromLocal->isSameDay($toLocal); + $showYear = $showDate && $fromLocal && $fromLocal->year !== $toLocal->year; + + $fromLabel = $fromLocal ? $this->formatFlightTime($fromLocal, $showDate, $showYear) : 'Unknown'; + $toLabel = $this->formatFlightTime($toLocal, $showDate, $showYear); + return "{$label}: {$fromLabel} → {$toLabel}"; } + protected function formatFlightTime(CarbonInterface $time, bool $showDate = false, bool $showYear = false): string + { + $datePart = $showDate ? $time->format($showYear ? 'j M Y, ' : 'j M, ') : ''; + + return $datePart . $time->format('g:ia') . ' ' . $time->format('T'); + } + protected function describeAircraftType(?Aircraft $from, ?Aircraft $to, ?string $equipmentIata, bool $notFound): string { $fromLabel = $from?->display_name_short ?? 'None';